123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php
- use demo\Controllers\BlogController;
- use demo\Controllers\DelegatingController;
- use demo\Controllers\ErrorController;
- use demo\Controllers\EscapeController;
- use demo\Controllers\FeedbackController;
- use demo\Controllers\HomeController;
- use demo\Controllers\StreamController;
- use demo\Controllers\UserController;
- use demo\Errors\GenericErrorHandler;
- use demo\Errors\HttpErrorHandler;
- use demo\Views\JsonView;
- use Silex\Application;
- use Symfony\Component\HttpFoundation\JsonResponse;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\HttpKernel\Exception\HttpException;
- //Request::setTrustedProxies(array('127.0.0.1'));
- // Fixed parameters for after() global middleware.
- $afterAllMiddleware = function (Request $request, Response $response, Application $app) {
- $MESSAGE = "<p>In aAM</p>\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 "<p>In bAM</p>\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));
|