php – 使用可变动作在Symfony 2中定义路由

试想一下,我有一个控制器,里面有几个动作.
为了达到每个动作,我必须在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 / *路由.

总而言之,我建议不要将“动态”动态路由直接用于方法名称.
另一种方法是创建一个命令,该命令将在执行后生成路由.

上一篇:php – 强制Joomla JRoute使用菜单项


下一篇:php – Laravel:将任意URL解析为相应的Controller / Route?