Php Symfony-默认路由。自动映射/{controller/{action}

Php Symfony-默认路由。自动映射/{controller/{action},php,symfony,Php,Symfony,我正在尝试将我的url自动映射到控制器 example.com/test | MyBundle:Default:Index example.com/test/login | MyBundle:默认值:login 这是我的方法,但它还不起作用。 问题是,操作应该是可选的,如果没有提供,应该默认为“Index” app/config/routing.php use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Rou

我正在尝试将我的url自动映射到控制器

example.com/test | MyBundle:Default:Index

example.com/test/login | MyBundle:默认值:login

这是我的方法,但它还不起作用。 问题是,操作应该是可选的,如果没有提供,应该默认为“Index”

app/config/routing.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

// load route collection object
$collection = new RouteCollection();

// add default route
$collection->add('default', new Route('/{_controller}/{_action}', array(
    '_controller' => 'MyBundle:Default:Index',
        ), array('_method' => 'GET')
        )
);

非常感谢您的帮助!

Symfony在其工作流中使用了请求对象中名为“\u controller”的属性。在某一点上,该属性填充了如下内容

  • MyBundle:默认值:索引或
  • project.bundle.controller:method(如果您将控制器注册为服务)
您还可以将此属性用作路线中的参数:

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

// load route collection object
$collection = new RouteCollection();

// add default route
$collection->add('default', new Route('/{_controller}'));
然后可以调用,它正确解析并执行控制器


但请确保不要在生产环境中使用此选项,因为这确实是一种不好的做法。

首先:URL很难看,不能自我解释。其次,在生成路由时,您始终需要添加_controller作为参数。如果您更改捆绑包、控制器或方法的名称,则必须搜索所有发生的错误如果你错过了一个,你的代码肯定会崩溃,而你自己却不知道。开始使用symfony来尝试一些东西,这是可以的,但除此之外,没有其他的。