123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?php
- use demo\Controllers\BlogController;
- use demo\Controllers\FeedbackController;
- use demo\Controllers\UserController;
- use Silex\Application;
- 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) {
- echo "<p>In aAM</p>\n";
- };
- $beforeAllMiddleware = function (Request $request, Application $app) {
- 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);
- $app->get('/', function () use ($app) {
- return $app['twig']->render('index.html.twig', []);
- })->bind('homepage');
- $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 = "<ul>\n";
- foreach ($blogPosts as $post) {
- $output .= "<li>" . $post ['title'] . "</li>\n";
- }
- $output .= "</ul>\n";
- return $output;
- });
- // Default: http://blog, not http://blog/
- $app->get('/blog/{id}', BlogController::class . '::fifiAction')
- ->assert('id', '\d+')
- ->when("request.headers.get('User-Agent') matches '/firefox/i'");
- $app->get('/blog/{id}', function (Application $app, $id) use ($blogPosts) {
- if (!isset ($blogPosts [$id])) {
- // Will trigger the error() (or built-in) error handler.1
- $app->abort(Response::HTTP_NOT_FOUND, "Post $id does not exist.");
- }
- $post = $blogPosts [$id];
- return "<h1> {$post['title']}</h1>" . "<p> {$post['body']} </p>";
- })->assert('id', '\d+')
- ->value('id', 1)
- ->bind('blog_post');
- $app->post('/feedback', FeedbackController::class . '::feedbackAction');
- $app->get('/user/{user}', UserController::class . '::itemAction')
- ->convert('user', 'converter.user:convert');
- /* Error handlers receive exactly these arguments, in that order. */
- $app->error(function (HttpException $e, Request $request, $code) {
- $response = new Response('HTTP Error caught: skipping generic error handler.',
- // This status is ignored by Silex, which tries to ensure status code
- // consistency with the exception.
- Response::HTTP_NOT_FOUND,
- // But we can force it with this fake header, which is removed before
- // sending the response to the user agent.
- ['X-Status-Code' => Response::HTTP_OK]);
- return $response;
- });
- /* Custom error handlers registered with error() take precedence over the
- built-in error handler provider by Silex, but the formatted error messages it
- provides can be accessed in debug mode by returning based on $app['debug']
- like this.
- */
- $app->error(function (\Exception $e, Request $request, $code) use ($app) {
- // Use the default handler in debug mode.
- if ($app['debug']) {
- return;
- }
- // Use our error formats otherwise.
- // 404.html, or 40x.html, or 4xx.html, or error.html
- $templates = [
- 'errors/' . $code . '.html.twig',
- 'errors/' . substr($code, 0, 2) . 'x.html.twig',
- 'errors/' . substr($code, 0, 1) . 'xx.html.twig',
- 'errors/default.html.twig',
- ];
- return new Response($app['twig']->resolveTemplate($templates)
- ->render(['code' => $code]), $code);
- });
|