我为Symfony 2阅读的教程指示用户在
中输入他们的路由信息app/config/routing.yml
如果用户希望在自己的捆绑包中包含路由信息,则会指示他们将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
文件之间的差异仍然有点不清楚。
答案 0 :(得分:2)
有没有办法跳过“将此额外配置添加到app / config / routing.yml文件?
不,这就是SonataAdminBundle,FOSUserBundle以及其他一些人处理它的方式。
<强>为什么吗
路由属于应用程序,而不是每个捆绑包。如果每个捆绑包都开始包含他们自己的路由文件并且Symfony2自动加载它们,那么您很快就会在应用程序中使用或不想启用一些路由。
如果SonataAdminBundle希望您使用/admin
,但您已经有一条路线并希望Sonata使用/sonata/admin
,该怎么办?你需要一个文件覆盖这些路线,然后你又回到原点!
此外,虽然缓存可以缓解这一部分,但查找文件的成本很高,并且会显着降低开发环境的速度。这就是即使在开发模式下也从缓存中读取转换文件的原因,并且在添加新的转换资源时必须清除缓存。请参阅:http://symfony.com/doc/current/book/translation.html#message-catalogues
最后,将路由从config.yml中删除只是一个组织问题。路由和配置是两回事,不属于同一个文件。
一般的想法是每个文件都是的东西,并且应该只做那个的东西。