1

我想覆盖一个核心 Symfony2 类。

具体来说,我想覆盖 vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateReference.php,TemplateReference,这样我就可以更改它找到模板的位置。这是否可能,如果可以,如何?

4

2 回答 2

7

不要这样做,除非你确切地知道你在做什么,并且你 100% 确定你不会破坏某些东西......

如果你使用 Symfony 2.0 ClassLoader 组件:

$loader->registerNamespaces(array(
    'Symfony' => array(
        __DIR__.'/../src/vendor/symfony/src',
        __DIR__.'/../vendor/symfony/src',
        __DIR__.'/../vendor/bundles',
    ),
    ...
));

要使用作曲家做到这一点,这应该可以工作,编辑您的composer.json文件:

"autoload": {
    "psr-0": {
         "": "src/",
         "Symfony": "src/vendor/symfony/src/"
    }
},

这告诉自动加载器,当它试图从Symfony命名空间加载一个类时,首先查看你的src/vendor/symfony/src,然后vendor/symfony/srcvendor/bundles...

然后复制您要在那里编辑的文件:

src/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateReference.php
于 2012-07-13T07:53:01.433 回答
0

您可以轻松地覆盖一些定义为服务的类(您可以检查 app/cache/dev/appDevDebugProejctContainer.xml),并覆盖您的 parameter.ini 上的服务名称。

但是,如果它没有像这样定义的类,您可以创建自己的“补丁”,您可以在作曲家更新后应用。

很多人会说编辑核心类很脏,但如果你想要好的性能,它通常是实现它的唯一解决方案;-),它简单、快速和容易。

欢迎其他解决方案..

于 2012-08-10T13:02:44.243 回答