根据Symfony中的URL加载子捆绑包


Load Child Bundle depending on URL in Symfony

我创建了一个捆绑包,为一些用例提供默认功能
不,我想将X个URL定向到此项目。到目前为止没有问题,所有URL都指向/web文件夹。

但现在我想创建子捆绑包来修改每个URL的一些功能/行为/外观。为不同的URL加载不同的子捆绑包的最佳方式是什么?

我的方法是在AppKernel中检测URL,并在此时加载特定的子捆绑包。这有意义吗?或者有更好的方法吗?

确实,将代码放在AppKernel中似乎是处理这一问题的好方法,但您会遇到缓存问题。

示例:

如果您的请求A加载了捆绑包A,它将被缓存。如果您的请求B加载了捆绑包B,但没有加载捆绑包A,那么您将收到一个与加载捆绑包的类有关的错误。

另一个问题是路由,您必须为不同的捆绑包集创建单独的路由文件。

我的方法将取决于环境,在您的前端控制器中,您将捕获主机,然后为每个URL使用不同的环境(hosta_dev/hosta_prod/hostb_dev/hostb_prod(。这将创建单独的缓存,并允许您拥有单独的配置/路由文件。

无论如何,您仍然需要在AppKernel中进行修改(例如,不仅在环境为"dev"或"test"的情况下,而且在环境包含"dev"或"test"的情况下(。

希望能有所帮助。

您可以创建三个服务:

  1. 主要
  2. 继承自main的A
  3. 继承自main的B

然后在您的配置中默认定义my_servicemain。在url为A的控制器的服务初始化时,将其重新配置为A。与CCD_ 8相同。