没有app / config / routing.yaml的Symfony路由

时间:2013-06-26 01:28:11

标签: php symfony url-routing

我为Symfony 2阅读的教程指示用户在

中输入他们的路由信息
app/config/routing.yml

如果用户希望在自己的捆绑包中包含路由信息,则会指示他们将routing.yml文件添加到其捆绑包中,然后使用类似app/config/routing.yml指向其文件>

my_route_stuff:
    resource: "@CustomstuffBundle/resources/config/routing.yml"

有没有办法跳过“将此额外配置添加到app/config/routing.yml文件?我正在寻找将捆绑交给其他人的能力,并让他们能够将其部署到他们的Symfony应用程序无需编辑自己的app/config/routing.yml

如果无法做到这一点,那么如果有人可以解释为什么(即:背后的一般哲学)路由信息是AppKernel而不是单个Bundles的一部分,则可以获得奖励积分。我对routing.yml文件与普通Symfony config.yml文件之间的差异仍然有点不清楚。

1 个答案:

答案 0 :(得分:2)

有没有办法跳过“将此额外配置添加到app / config / routing.yml文件?

不,这就是SonataAdminBundleFOSUserBundle以及其他一些人处理它的方式。

<强>为什么吗

路由属于应用程序,而不是每个捆绑包。如果每个捆绑包都开始包含他们自己的路由文件并且Symfony2自动加载它们,那么您很快就会在应用程序中使用或不想启用一些路由。

如果SonataAdminBundle希望您使用/admin,但您已经有一条路线并希望Sonata使用/sonata/admin,该怎么办?你需要一个文件覆盖这些路线,然后你又回到原点!

此外,虽然缓存可以缓解这一部分,但查找文件的成本很高,并且会显着降低开发环境的速度。这就是即使在开发模式下也从缓存中读取转换文件的原因,并且在添加新的转换资源时必须清除缓存。请参阅:http://symfony.com/doc/current/book/translation.html#message-catalogues

最后,将路由从config.yml中删除只是一个组织问题。路由和配置是两回事,不属于同一个文件。

一般的想法是每个文件都是的东西,并且应该只做那个的东西