php - Symfony:覆盖 Symfony 服务(编译器通过)

标签 php symfony

我在 symfony 2.7 上,需要覆盖 Symfony\Component\Asset\UrlPackage

我看过http://symfony.com/doc/current/cookbook/bundles/override.htmlhttp://symfony.com/doc/current/cookbook/service_container/compiler_passes.html 但无法正常工作。

我在我的包 MyApp\CoreBundle\Overrides\UrlPackage 中创建了一个文件; 我将 UrlPackage 注册为服务并添加了一个功能:

public function process(ContainerBuilder $container)
{
    $definition = $container->getDefinition('assets.url_package');
    $definition->setClass('MyApp\CoreBundle\Overrides\UrlPackage');
}

奇怪的是,如果我在任何 Controller 中调用 $this->has('assets.url_package'),它都会返回 false。 我确实从 Symfony 下的服务文件中获取了它:

<service id="assets.url_package" class="Symfony\Component\Asset\UrlPackage" abstract="true">
        <argument /> <!-- base URLs -->
        <argument type="service" /> <!-- version strategy -->
        <argument type="service" id="assets.context" />
    </service>

如果我运行 php app/console debug:container,symfony 的 UrlPackage 不在那里,但是,如果我更改 vendor/*/UrlPackge 文件中的某些内容,它确实有效

有人能指出我正确的方向吗?

最佳答案

装饰服务是您要找的东西:

bar:
    public: false
    class: stdClass
    decorates: foo
    arguments: ["@bar.inner"]

可以在自己的服务中注入(inject)原有的服务,实现原有的接口(interface),使其兼容。

http://symfony.com/doc/2.7/service_container/service_decoration.html

关于php - Symfony:覆盖 Symfony 服务(编译器通过),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31511019/

相关文章:

javascript - php 值在 javascript 中不会改变

php - ftp_put() : Command STOR failed

php - 使用 php 上的 switch/toggle 按钮管理数据

php mysqli affected_rows

php - Symfony - 无法使用安装程序创建新项目

php - Mysql编码问题

validation - Symfony2 验证 - 没有为约束配置默认选项

Symfony2 登录路由不断重定向到 https

php - 如何在 Doctrine 中对多个实体执行以下查询?

android - 使用 Chrome 的 Data Saver 访问 Symfony 应用程序会导致 BadRequestHttpException