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); // Demo Twig. $app->get('/', HomeController::class . '::home') ->bind('homepage'); // Demo redirects and forwards. $app->get('/home', DelegatingController::class . '::redirectPath'); $app->get('/blogz', DelegatingController::class . '::forwardPath'); $app->get('/all_blogs', DelegatingController::class . '::forwardName'); // Demo typical entity listing routes with their modifiers. $app->get('/blogs', BlogController::class . '::index') ->bind('blog_list'); $app->get('/blogs-json', BlogController::class . '::json'); $app->get('/blogs-json-view', BlogController::class . '::jsonView'); $app->get('/blog/{id}', BlogController::class . '::fifiAction') ->assert('id', '\d+') ->when("request.headers.get('User-Agent') matches '/firefox/i'"); $app->get('/blog/{id}', BlogController::class . '::show') ->assert('id', '\d+') ->value('id', 1) ->bind('blog_post'); // Demo POST request handling. $app->post('/feedback', FeedbackController::class . '::feedbackAction'); // Demo escaping HTML and JSON $app->get('/hello/{name}', EscapeController::class . '::html'); $app->get('/hello-json/{name}', EscapeController::class . '::json'); // Demo streaming. $app->get('/noise', StreamController::class . '::customStream'); $app->get('/pass', StreamController::class . '::fileStream'); // Demo error handling. $app->get('err/http', ErrorController::class . '::errorHttp'); $app->get('err/base', ErrorController::class . '::errorBase'); // Demo param converters. $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. But the callback_resolver service: // - can not receive $app // - unlike the controller_resolver, can only use standard callables/services // - unlike the exception listener, can not use _invoke-able class names. // So one way to get the app is to use it as a global (!). $app->view([JsonView::class, 'handle']); // Handlers are examined in order, and called in a chain with the result of the // previous one. The last one must return a string or Response. $app->error([HttpErrorHandler::class, 'handle']); // Handlers do not receive $app, so they have to be closures or instantiated // here if they need it (or use the global $app like view handlers. $app->error(new GenericErrorHandler($app));