是否可以覆盖Symfony2中的路由处理程序


Is it possible to override a route handler in Symfony2?

假设使用Symfony2创建了一个模板应用程序。它包含一个产品描述页面,路线的创建/处理如下:

class ProductController extends Controller
{
    /**
     * @Route("/product/{id}")
     */
    public function showDecription($id)
    {
        // ...
    }
}

自定义应用程序是基于模板应用程序创建的。换句话说,模板应用程序提供了"默认值"。

是否可以在不修改模板应用程序代码的情况下覆盖自定义应用程序中的路由处理程序?如果路由需要在模板应用程序中以不同的方式声明才能被重写,那没关系。在这种情况下应该如何处理?

Symfony指南提供了以下关于覆盖路由的信息:

路由

路由从未在Symfony中自动导入。如果你想包括任何捆绑包中的路由,则必须手动从应用程序中的某个位置导入(例如。app/config/routing.yml).

"覆盖"捆绑包路由的最简单方法是从不导入它完全与其导入第三方捆绑包的路由将该路由文件复制到应用程序中,对其进行修改并导入相反

主路由文件是app/config/routing.yml。我建议你再创建两个文件:app/config/routing_default.ymlapp/config/routing_override.yml,然后将你的app/config/routing.yml编辑为

override:
  resource: routing_override.yml
default:
  resource: routing_default.yml

现在,在路由默认中,您可以添加所有默认应用程序路由。并且在override one中-所有附加的。

此外,替代和默认中的路由名称不应相同。如果要按名称覆盖管线,则应更改包含的顺序。