在 Symfony 中根据 URL 加载子包

Load Child Bundle depending on URL in Symfony

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

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

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

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

示例:

如果您的请求 A 加载包 A,它将被缓存。 如果您的请求 B 加载了 bundle B 但没有加载 bundle A,您将收到与加载 bundle A 相关的错误 类.

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

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

你仍然需要在你的 AppKernel 中进行修改(例如,你必须加载 "dev" 包,而不仅仅是当环境是 "dev" 或 "test"但如果环境包含 "dev" 或 "test").

希望对您有所帮助。

您可以创建三个服务:

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

然后在你的配置中默认定义my_servicemain。 在使用 url A 为控制器初始化服务时,将其重新配置为 AB.

相同