从另一个包中覆盖symfony扩展的“正确”方法是什么

用户名

我需要覆盖文件/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php

它使用twig函数“ asset”从捆绑包中加载twig getAssetUrl。

/**
 * Returns a list of functions to add to the existing list.
 *
 * @return array An array of functions
 */
public function getFunctions()
{
    return array(
        new \Twig_SimpleFunction('asset', array($this, 'getAssetUrl')),
        new \Twig_SimpleFunction('assets_version', array($this, 'getAssetsVersion')),
    );
}

我想在不触摸核心文件的情况下覆盖asset()的twig函数,否则下一次symfony更新将覆盖该文件

ba

考虑您的代码位于AppBundle命名空间中。首先在app / config.yml或src / AppBundle / Resources / config / something.yml中创建服务配置(您必须在bundle extension中加载此配置文件)。不要忘记将其放在服务密钥下。

twig.extension.assets:
    class:     AppBundle\Twig\AssetsExtension
    arguments: ["@service_container", "@?router.request_context"]
    public: false
    tags:
        - { name: twig.extension }

现在,让我们创建扩展名src / AppBundle / Twig / AssetsExtension.php。该类继承自原始扩展,我将仅覆盖一个方法(在模板asset()中)。

<?php

namespace AppBundle\Twig;

class AssetsExtension extends \Symfony\Bundle\TwigBundle\Extension\AssetsExtension
{
    public function getAssetUrl($path, $packageName = null, $absolute = false, $version = null)
    {
        return parent::getAssetUrl('/something/' . $path, $packageName, $absolute, $version);
    }
}

现在,重新加载后,您的所有资产都应该不正确,并且默认情况下以/ something /为前缀。如果出现问题,您可以尝试删除Symfony缓存。我在Symfony 2.5.5上测试了此方案。

使用内置服务的另一种方法是编译器pass在编译器传递中,您可以修改整个Symfony服务容器(删除,替换,修改服务)。Symfony与DIC有关。我希望它是足够好的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Eclipse中重用另一个Java项目中的类的最佳方法是什么?

在Groovy中从另一个对象中减去一个对象列表的最佳方法是什么?

从stdout删除流以添加另一个流的正确方法是什么?

将JSON对象包装在另一个对象中的正确方法是什么?

在另一个项目中插入活动的正确方法是什么?

将PHP脚本分割并集成到另一个脚本中的正确方法是什么?

无法覆盖另一个模块swift中在类扩展中声明的open方法

覆盖另一个类中的方法

测试覆盖仅调用另一个方法的方法的最佳方法是什么?

从另一个包覆盖包模板

绑定到UWP中另一个元素的大小(宽度/高度)的正确方法是什么?

覆盖模块方法以扩展功能,然后从另一个文件导入更新的模块

用嵌套在另一个扩展Comparable的类中的类覆盖compareTo方法

在Apollo Server中调用另一个解析器的最佳方法是什么?

从另一个控制器操作中检测请求是否为“ forward()”的正确方法是什么?

根据另一个Pandas列中的条件添加到python列表的正确方法是什么?

覆盖另一个模块中的方法

模块将mongodb导出到另一个文件-正确的方法是什么?(在nodejs中)

在另一个流完成之后发出值的正确方法是什么?

在PHP中创建另一个类的对象的正确方法是什么?

从另一个PHP文件更改一个PHP文件中的变量的最佳方法是什么

将C标头函数从另一个包导出时,将C标头函数导入到R包中的正确方法是什么?

覆盖另一个文件中的类的方法

在Swift中从一个SKScene调用另一个方法的最干净方法是什么?

使用一个 observable 的输出作为另一个 angular 的输入的正确方法是什么?

在 AngularJS 中,从另一个模块导入组件的最佳方法是什么?

使用另一个表中的 COUNT 作为列的查询的正确 MySQL 语法是什么?

在另一个类的方法中调用类实例的正确方法是什么?

覆盖另一个包中的内部方法