如何覆盖Core Symfony2类?

时间:2012-07-13 04:26:47

标签: symfony

我想覆盖核心Symfony2类。

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

2 个答案:

答案 0 :(得分:7)

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

如果您使用的是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/src然后在vendor/bundles中...

然后复制要编辑的文件:

src/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateReference.php

答案 1 :(得分:0)

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

但如果没有这样定义的类,你可以创建自己的"补丁"你在作曲家更新后申请。

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

欢迎其他解决方案..