试想一下,我有一个控制器,里面有几个动作.
为了达到每个动作,我必须在routing.yml文件中严格定义它,如下所示:
admin_edit_routes:
pattern: /administrator/edituser
defaults: { _controller: MyAdminBundle:Default:edituser }
admin_add_routes:
pattern: /administrator/adduser
defaults: { _controller: MyAdminBundle:Default:adduser }
我可以有很多这样的页面.我想要实现的是在我的URI中定义必要的操作,就像Kohana路由一样.
我的意思是,我只想为所有行动使用一条路线:
(以下代码无效,仅举例)
admin_main_route:
pattern: /administrator/{action}
defaults: { _controller: MyAdminBundle:Default:{action} action:index}
它会将所有请求传递给/ administrator / {anything}到此路由,之后,根据uri中所述的操作,将要调用所需的操作.
如果在uri中没有说明行动,那么我们就会抛出指数行动.
是否有可能在Symfony 2中以任何方式,如果是,那么如何?
提前感谢.
解决方法:
这样做感觉不对.通过GET方法直接“动态”公开控制器API(方法),可以打开安全漏洞的应用程序.这也很容易导致不必要的行为.
而且,你会如何在树枝中生成路线?通过给出与方法名称相关的显式常量?
{{ path('dynamic_route', { 'method': 'addUser' }) }}
这不是Symfony的工作方式,也不是它的推荐方式. Symfony不是CodeIgniter也不是Kohana.你不需要第二个“前端控制器”
如果这是一个懒惰的问题,您可以将路由配置切换到annotations.让Symfony以最小的努力自动生成您需要的路由.
namespace Acme\FooBundle\Controller;
/**
* @Route("/administrator")
*/
class DefaultController extends Controller
{
/**
* @Route
*/
public function indexAction(Request $request);
/**
* @Route("/adduser")
*/
public function addUserAction(Request $request);
/**
* @Route("/edituser")
*/
public function editUserAction(Request $request);
/**
* @Route("/{tried}")
*/
public function fallbackAction($tried, Request $request)
{
return $this->indexAction($request);
}
}
fallbackAction方法返回indexAction内容中不存在的任何/ administrator / *路由.
总而言之,我建议不要将“动态”动态路由直接用于方法名称.
另一种方法是创建一个命令,该命令将在执行后生成路由.