我的应用程序需要缓存更温暖,但为了让事情变得有趣,这个缓存更加依赖于Symfony路由缓存更加温暖。
在加载路由之前,需要运行我自己的代码,然后在加载后,我需要对生成的路由名执行更多操作。为了实现这个目的,我需要使用我自己的实现来包装内置的路由加热器。
更换原始服务很简单,但如何将该服务注入我的替代服务?
内置类将router
服务注入到构造函数中。如果我在我自己的代码中复制了这个(调用new RouteCacheWarmer
),它可能会破坏已经替换服务的第三方捆绑包。将服务别名化为我自己的服务,如果另一个包也这样做,也可能会中断。
我的目标是运行自己的缓存加热器,代替路由缓存加热器,但是从我自己的内部运行现有的加热器。同时与其他可能修改了内置服务的软件包一起玩得很好。
答案 0 :(得分:1)
事实证明,Symfony在2.5版中添加了此功能。它被称为service decoration。
bar:
public: false
class: stdClass
decorates: foo
arguments: ["@bar.inner"]
这会将bar
服务设置为foo
的别名,同时将foo
服务重命名为bar.inner
,使其可用于注入。当第三方捆绑包替换foo
服务时,其所做的更改不应影响bar
服务。
答案 1 :(得分:0)
您可以使用链式路由器,这样您就可以让Symfony路由器做自己的事情,然后完全单独运行您的路由器。 Symfony CMF在RoutingBundle component中提供此类功能。