In aAM
\n"; if ($response instanceof JsonResponse) { $content = $response->getContent(); $raw = json_decode($content, TRUE); $raw[] = $MESSAGE; $newContent = json_encode($raw); $response->setContent($newContent); return $response; } // Only echo info on text responses. $ct = $response->headers->get('Content-Type'); if (isset($ct) && strpos($ct, 'text') !== 0) { return; } echo $MESSAGE; }; $beforeAllMiddleware = function (Request $request, Application $app) { // Only add info on requests URIs containing "json". if (!preg_match('/json/', $request->getRequestUri())) { echo "In bAM
\n"; } }; // This type of global configuration does not apply to mounted controllers, // which have their own "global" configuration. $app->before($beforeAllMiddleware); $app->after($afterAllMiddleware); $app->get('/', function () use ($app) { return $app['twig']->render('index.html.twig', []); })->bind('homepage'); // Redirect via response header $app->get('/home', function () use ($app) { return $app->redirect('/', Response::HTTP_TEMPORARY_REDIRECT); // Default 302. }); // Forward to another controller to avoid redirection. $app->get('/blogz', function () use ($app) { $subRequest = Request::create('/blogs', 'GET'); return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST); }); $app->get('/all_blogs', function () use ($app) { /** @var \Symfony\Component\Routing\Generator\UrlGeneratorInterface $generator */ $generator = $app['url_generator']; $subRequest = Request::create($generator->generate('blog_list', 'GET')); return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST); }); $blogPosts = [ 1 => [ 'date' => '2011-03-29', 'author' => 'igorw', 'title' => 'Using Silex', 'body' => '...It takes time on version changes...', ], 2 => [ 'date' => '2015-03-29', 'author' => 'igorw', 'title' => 'Using Silex 2', 'body' => '...Especialy S1 to S2...', ], ]; // Available automatic arguments on controllers: Application, Request. $app->get('/blogs', function () use ($blogPosts) { $output = "{$post['body']}
"; })->assert('id', '\d+') ->value('id', 1) ->bind('blog_post'); $app->post('/feedback', FeedbackController::class . '::feedbackAction'); $app->get('/hello/{name}', function ($name, Application $app) { return $app->escape("Hello, $name"); }); $app->get('/hello-json/{name}', function ($name, Application $app) { return $app->json(['name' => $name]); }); $app->get('/noise', function (Application $app) { $noise = base64_encode(random_bytes(2048)); $stream = fopen('php://memory', 'r+'); fwrite($stream, $noise); rewind($stream); $streamer = function () use($stream) { while (!feof($stream)) { echo fread($stream, 1024); ob_flush(); flush(); } fclose($stream); }; return $app->stream($streamer, Response::HTTP_OK, ['Content-type' => 'text/plain']); }); $app->get('/pass', function (Application $app) { return $app->sendFile('/etc/passwd'); }); $app->get('/user/{user}', UserController::class . '::itemAction') ->convert('user', 'converter.user:convert'); // Register a view handler. They can also receive Request $request as 2nd arg, // e.g. for basic content negotiation. $app->view(function (array $controllerResult) use ($app) { // Does limited escaping using JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT. // Try /hello-json/