У меня есть проект в Silex со стандартными определенными маршрутами, но для маршрутов, которые не существуют, я хотел бы перенаправить или переслать на домашнюю страницу или страницу с ошибкой.
Я не вижу этого в документации, но я не понимаю, почему это невозможно.
Как мне это сделать?
Копируя обработчик ошибок из Silex Skeleton, вы можете сделать это легко:
<?php
$app->error(function (\Exception $e, Request $request, $code) use ($app) {
if ($app['debug']) {
return;
}
// 404.html, or 40x.html, or 4xx.html, or error.html
$templates = array(
'errors/'.$code.'.html',
'errors/'.substr($code, 0, 2).'x.html',
'errors/'.substr($code, 0, 1).'xx.html',
'errors/default.html',
);
return new Response($app['twig']->resolveTemplate($templates)->render(array('code' => $code)), $code);
});
Или вы можете перенаправить/переслать (первый отправляется в браузер, а второй - нет). Проверьте документы для переадресации/пересылки, в основном вместо того, чтобы возвращать ответ на основе отображаемого шаблона, вам просто нужно return $app->redirect
или return $app->forward
Symfony2 содержит раздел о настройке страниц ошибок в Cookbook. Посмотрите, как настроить страницы ошибок