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

时间:2015-11-25 08:27:21

标签: php symfony routing

假设使用Symfony2创建模板应用程序。它包含产品描述页面,并按如下方式创建/处理路径:

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

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

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

2 个答案:

答案 0 :(得分:1)

主路由文件是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

现在在路由默认情况下,您可以添加所有默认应用程序路由。并且覆盖一个 - 所有其他的。

覆盖中的路由名称和默认值也不应相同。如果要按名称覆盖路由,则应更改包含的顺序。

答案 1 :(得分:1)

Symfony guide包含有关覆盖路线的以下信息:

  

<强>路由

     

在Symfony中永远不会自动导入路由。如果你想   包括来自任何捆绑的路由,然后必须手动   从您的应用程序中的某个位置导入(例如   应用程序/配置/ routing.yml中)。

     

“覆盖”捆绑包路由的最简单方法是永远不会导入它   一点都不而不是简单地导入第三方软件包的路由   将该路由文件复制到您的应用程序中,对其进行修改并导入   代替。