我想覆盖一个核心 Symfony2 类。
具体来说,我想覆盖 vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateReference.php,TemplateReference,这样我就可以更改它找到模板的位置。这是否可能,如果可以,如何?
我想覆盖一个核心 Symfony2 类。
具体来说,我想覆盖 vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateReference.php,TemplateReference,这样我就可以更改它找到模板的位置。这是否可能,如果可以,如何?
不要这样做,除非你确切地知道你在做什么,并且你 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/src
在vendor/bundles
...
然后复制您要在那里编辑的文件:
src/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateReference.php
您可以轻松地覆盖一些定义为服务的类(您可以检查 app/cache/dev/appDevDebugProejctContainer.xml),并覆盖您的 parameter.ini 上的服务名称。
但是,如果它没有像这样定义的类,您可以创建自己的“补丁”,您可以在作曲家更新后应用。
很多人会说编辑核心类很脏,但如果你想要好的性能,它通常是实现它的唯一解决方案;-),它简单、快速和容易。
欢迎其他解决方案..