在Symfony 3中捕获所有路线

Yes*_*rry 4 php yaml routes symfony

我在Symfony2中有一个全能的后备路由,我无法在Symfony3中工作.我尝试了这种确切的语法(我的Symfony2路线的逐字副本),但是没有用.

fallback:
    path:     /{req}
    defaults: { _controller: MyBundle:Default:catchAll }
    requirements:
        req: ".+"
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Symfony3中使用它?(这实际上是唯一阻止我使用Symfony3并让我保持在v2.8的东西)

Alv*_*unk 11

这应该可以帮到你:

route1:
  path: /{req}
  defaults: { _controller: 'AppBundle:Default:index' }
  requirements:
      req: ".+"
Run Code Online (Sandbox Code Playgroud)

其中,我的控制器被称为"DefaultController",我有一个名为"indexAction()"的函数.

这是我的DefaultController代码:

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

我确实尝试过你在我的环境中所说的内容,直到我指定了正确的控制器设置才能正常工作.


编辑:

为此,必须将参数Request $request(带有类型提示)添加到操作的方法签名中.


Mar*_*ijn 5

我发现当前接受的答案对Symfony 4几乎有用,所以我要添加我的解决方案:


这是我为使其在Symfony 4 中工作所做的工作:

  • 打开 /src/Controller/DefaultController.php,确保有一个函数调用index(){}
    • 并不需要添加Request $request的第一个参数的一些评论建议。
    • 这是将处理被捕获的所有url的方法routes.yaml
  • 打开/config/routes.yaml,添加:

    yourRouteNameHere:
      path: /{req}
      defaults: { _controller: 'App\Controller\DefaultController::index' }
      requirements:        #  the controller --^     the method --^
        req: ".*"`  # not ".+"
    
    Run Code Online (Sandbox Code Playgroud)