繁体   English   中英

如何在Symfony2中覆盖路由

[英]How to override route in Symfony2

它不是symfony2重写单路径的重复 请耐心等待,并仔细阅读我的问题。

我的问题不同于上面的问题。 因此,我的Symfony应用具有标准结构。 但是它是以特定方式配置的。

  • app / config / routing.yml包含多个捆绑路由,例如:

     _project_custom1: resource: "@ProjectCustom1Bundle/Resources/config/routing.yml" prefix: /custom1 _project_custom2: resource: "@ProjectCustom2Bundle/Resources/config/routing.yml" prefix: /custom2 
  • src /目录具有两个包和下一个结构,例如

    Common/AdminBundle/Resources/config/routing.yml Common/AdminBundle/Resources/config/routing_dashboard.yml

    routing.yml包含以下routing.yml行:

    admin_dashboard_content: resource: "@CommonAdminBundle/Resources/config/routing_dashboard.yml" prefix: /dashboard

    routing_dashboard.yml包含:

    admin_dashboard_license_content: path: /license-content defaults: { _controller: CommonAdminBundle:Dashboard:licenseContent }

下一个捆绑包是“自定义捆绑包”。 如何扩展DashboardController ,覆盖licenseContentAction并仅覆盖一个( /license-content )路由并使Symfony使用我的自定义捆绑包配置?

复制相同的结构不起作用。 根据我的解释,我写了这样的东西:

<?php
namespace Custom\Custom1\Controller;
use Common\AdminBundle\Controller\DashboardController as BaseController;
class DashboardController extends BaseController
{
    public function licenseContentAction()
    {
       //return parent::licenseContentAction();
       die("HELLO!");
    }
}

如何建立路由文件以使扩展方法起作用?

您需要做的就是将这些行添加到app/config/routing.yml文件中。

admin_dashboard_license_content:
    path: /dashboard/license-content
    defaults: { _controller: CustomBundle:Dashboard:licenseContent }

然后创建一个DashboardController ,将带有licenseContentAction方法的基本Symfony控制器扩展到CustomBundle命名空间中。

现在魔术...

如果要保留路径,则必须在routing.yml文件的开头添加这些行。 路线的名称必须不同(唯一),并且路线当然必须与替代路线相同。

Symfony查找路径,并在匹配时立即将请求重定向到相应的控制器操作。

如果要更改路径,请在routing.yml文件的末尾添加这些行。 路线名称必须相同。 我不确定以前定义的路由(路径)是否仍然存在,我想是的,并且是否仍在处理使用此路径发出的请求...

Symfony将路由收集到一个数组中,其中键是路由名称。 通过在文件末尾添加具有相同名称的路由,将覆盖先前定义的路由。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM