Как я могу переопределить основные классы Symfony2?

Я хочу переопределить основной класс Symfony2.

В частности, я хочу переопределить vendor / symfony / symfony / src / Symfony / Bundle / FrameworkBundle / Templating / TemplateReference.php, TemplateReference, чтобы я мог изменять местоположения, где он находит шаблоны. Возможно ли это, и если да, то как?

 Ceagle13 июл. 2012 г., 10:41
Например, я хочу автоматически обнаруживать мобильные устройства, и если пользователь приходит с мобильного устройства, я хотел бы посмотреть, находится ли эквивалентный файл шаблона в views / mobile / вместо / views / .. Точный файл I Упомянутый содержит класс, который находит путь к шаблонам веток.
 Elnur Abdurrakhimov13 июл. 2012 г., 09:22
Какой вариант использования?

Ответы на вопрос(2)

Решение Вопроса

если вы точно не знаете, что делаете, и вы на 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
 13 июл. 2012 г., 10:45
Он говорит, что вы все должны делать это по-разному, используя композитор на 2.1, но это может быть легко достижимо.
 Ceagle13 июл. 2012 г., 10:44
Мне нравится этот метод. Но вы говорите, что он не работает с 2.1?
 13 июл. 2012 г., 10:14
Тем временем Symfony использует механизм автозагрузки композиторов.
 13 июл. 2012 г., 10:35
эм ... Начал комментарий с "Но 2.0 тоже использует композитор", но я был достаточно мудр, чтобы сначала взглянуть на него. Вы совершенно правы.
 13 июл. 2012 г., 10:33
Да, но его вопрос помечен как 2.0, а не 2.1 :)

определенные как сервис (вы можете проверить в app / cache / dev / appDevDebugProejctContainer.xml), и переопределить имя сервиса в вашем файле parameter.ini.

НО, если класс не определен подобным образом, вы можете создать собственный & quot; патч & quot; Вы применяете после обновления композитора.

Многие люди скажут, что редактировать основные классы - это грязно, но если вам нужна хорошая производительность, зачастую это единственное решение для достижения этого ;-), это просто, быстро и легко. легко.

Другие решения приветствуются.

 23 апр. 2014 г., 07:30
этот ответ немного скрыт, более подробную информацию можно найти здесь:stackoverflow.com/questions/23225839/… Кстати, трогать основные классы плохо, никогда не делай этого

Ваш ответ на вопрос