2016-05-24 2 views
2

У меня есть все-таки резервный маршрут в Symfony2, который я не мог получить в Symfony3. Я пробовал этот точный синтаксис (дословную копию моего маршрута Symfony2), и это не сработало.Catch-all route in Symfony 3

fallback: 
    path:  /{req} 
    defaults: { _controller: MyBundle:Default:catchAll } 
    requirements: 
     req: ".+" 

Как я могу заставить это работать в Symfony3? (Это буквально единственное, что удерживает меня от использования Symfony3 и держать меня в v2.8)

ответ

5

Это должно помочь вам:

route1: 
    path: /{req} 
    defaults: { _controller: 'AppBundle:Default:index' } 
    requirements: 
     req: ".+" 

Где мой контроллер называется «контроллера по умолчанию», и у меня есть функция называется indexAction().

Вот мой код контроллера по умолчанию:

class DefaultController extends Controller 
{ 
    /** 
    * @Route("/", name="homepage") 
    */ 
    public function indexAction(Request $request) 
... 

я на самом деле попробовать то, что вы сказали, в моем окружении, и он не работал, пока я не правильные настройки контроллера указанные.


EDIT:

Для этой работы необходимо было добавить параметр Request $request (с тип подсказка) для подписи метода действия пользователя.

+2

Это именно то, что он уже был ... –

+1

@TylerSebastian, я обновил свой пост, чтобы показать мой код контроллера по умолчанию. Кстати, я проверил код ops, чтобы убедиться, что он не работает, как он сказал, а затем сделал изменения, о которых идет речь, и это дает возможность поймать весь маршрут. Я просто подтвердил, добавив «/ home» в свой URL. –

+0

@AlvinBunk интересно, почему вы предполагаете параметр 'Request $ request'? В этом нет никакой документации, поэтому мой вопрос в первую очередь. Спасибо, это сработало! –

1

Вы также можете override Exception controller.

# app/config/config.yml 
twig: 
    exception_controller: app.exception_controller:showAction 

# app/config/services.yml 
services: 
    app.exception_controller: 
     class: AppBundle\Controller\ExceptionController 
     arguments: ['@twig', '%kernel.debug%'] 
namespace AppBundle\Controller; 

use Symfony\Component\Debug\Exception\FlattenException; 
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 

class ExceptionController 
{ 
    protected $twig; 

    protected $debug; 

    public function __construct(\Twig_Environment $twig, $debug) 
    { 
     $this->twig = $twig; 
     $this->debug = $debug; 
    } 

    public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null) 
    { 
     // some action 

     return new Response($this->twig->render('error/template.html.twig', [ 
       'status_code' => $exception->getStatusCode() 
      ] 
     )); 
    } 
} 
+0

Спасибо, хорошая помощь, но это не для обработки исключений. –