/** * Add the controller's routes and relative methods. * Request and response are PSR-7 compliant * @param App $application the Slim application to be configured * @return null */ public static function createRoutes(App $application) { // Note: in the SlimFramework's routing function closures, $this equals to the App's Container. $base = static::$baseUri; // Routes that need the user to be admin if (Utils::isAdmin()) { // Product creation (view) $application->map(['GET', 'POST'], "{$base}/create[/]", function (Request $request, Response $response) { return (new self($this))->handleCreate($request, $response); })->setName('productCreate'); // Products list (view) $application->get("{$base}/list[/]", function (Request $request, Response $response) { return (new self($this))->handleReadList($request, $response); })->setName('productList'); // Product edit (view) $application->map(['GET', 'POST'], "{$base}/{product}/edit[/]", function (Request $request, Response $response, $args) { return (new self($this))->handleEdit($request, $response, intval($args['product'])); })->setName('productEdit'); } // Routes that can be seen by anyone // ... }
})->setName('login'); // Logout (fake) $app->map(['POST', 'GET'], '/logout', function (Request $request, Response $response) { $_SESSION['user'] = '******'; /** @var RouterInterface $router */ $router = $this->get('router'); return $response->withStatus(302)->withAddedHeader("Location", $router->pathFor('home')); })->setName('logout'); // Index (redirect/login) $app->get('/', function (Request $request, Response $response) { $isAdmin = Utils::isAdmin(); if ($isAdmin) { /** @var RouterInterface $router */ $router = $this->get('router'); return $response->withStatus(302)->withAddedHeader("Location", $router->pathFor('productList')); } return \name\giacomofurlan\TwigUtil::render($this, $response, "home.twig"); })->setName('home'); // 404, silent redirect (home / products list) $app->getContainer()['notFoundHandler'] = function (Container $container) { return function (Request $request, Response $response) use($container) { $isAdmin = Utils::isAdmin(); /** @var RouterInterface $router */ $router = $container->get('router'); $response = $response->withStatus(302); if ($isAdmin) { return $response->withAddedHeader("Location", $router->pathFor('productList')); } return $response->withAddedHeader("Location", $router->pathFor('home')); }; };
public static function render(Container $container, ResponseInterface $response, $template, array $context = []) { $defaultCommonContext = ['user' => Utils::isAdmin() ? 'admin' : 'n00b']; $context = array_merge($defaultCommonContext, $context); return $container['view']->render($response, $template, $context); }