Я пытаюсь переопределить основные компоненты Symfony своим. Метод, который я использую:
"autoload": { "psr-0": { "": "src/", "Symfony": "src/vendor/symfony/src/" } }
Однако, когда я запускаю обновление и установку композитора, это никогда не учитывает это. Это не правильный метод, чтобы заставить автозагрузчик заглядывать в другой каталог сначала перед ядром Symfony?
Любые указатели оценили!
EDIT: пути к файлам
SRC / поставщик / Symfony / SRC / Symfony / Мост / Twig / Extension / TranslationExtension.php
src / vendor / symfony / src / Symfony / Component / Translation / Translator.php src / vendor / symfony / src / Symfony / Component / Translation / Loader / YamlFileLoader.php
<?php // autoload_namespaces.php generated by Composer $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( 'Twig_Extensions_' => $vendorDir . '/twig/extensions/lib/', 'Twig_' => $vendorDir . '/twig/twig/lib/', 'Symfony\\Bundle\\SwiftmailerBundle' => $vendorDir . '/symfony/swiftmailer-bundle/', 'Symfony\\Bundle\\MonologBundle' => $vendorDir . '/symfony/monolog-bundle/', 'Symfony\\Bundle\\AsseticBundle' => $vendorDir . '/symfony/assetic-bundle/', 'Symfony' => array($vendorDir . '/symfony/symfony/src/', '/src/vendor/symfony/src/'), 'SessionHandlerInterface' => $vendorDir . '/symfony/symfony/src/Symfony/Component/HttpFoundation/Resources/stubs', 'Sensio\\Bundle\\GeneratorBundle' => $vendorDir . '/sensio/generator-bundle/', 'Sensio\\Bundle\\FrameworkExtraBundle' => $vendorDir . '/sensio/framework-extra-bundle/', 'Sensio\\Bundle\\DistributionBundle' => $vendorDir . '/sensio/distribution-bundle/', 'Monolog' => $vendorDir . '/monolog/monolog/src/', 'Metadata\\' => $vendorDir . '/jms/metadata/src/', 'JMS\\SecurityExtraBundle' => $vendorDir . '/jms/security-extra-bundle/', 'JMS\\DiExtraBundle' => $vendorDir . '/jms/di-extra-bundle/', 'JMS\\AopBundle' => $vendorDir . '/jms/aop-bundle/', 'Doctrine\\ORM' => $vendorDir . '/doctrine/orm/lib/', 'Doctrine\\DBAL' => $vendorDir . '/doctrine/dbal/lib/', 'Doctrine\\Common' => $vendorDir . '/doctrine/common/lib/', 'Doctrine\\Bundle\\DoctrineBundle' => $vendorDir . '/doctrine/doctrine-bundle/', 'CG\\' => $vendorDir . '/jms/cg/src/', 'Assetic' => $vendorDir . '/kriswallsmith/assetic/src/', '' => $baseDir . '/src/', );
Если вручную отредактировать строку автозагрузки, выполните следующие действия:
'Symfony' => array('/Users/macbook/Sites/Opia/Gaia/src/vendor/symfony/src/', $vendorDir . '/symfony/symfony/src/'),
Все работает так, как оно есть. Итак, теперь это в основном находит решение, почему композитор не подходит должным образом.
EDIT 2:
Выполняя еще несколько поисков, этот метод не является хорошей реализацией:
https://groups.google.com/forum/#!msg/composer-dev/HprRV_wJZg4/M_zQ8O7lB6IJ
Вместо этого мне нужно расширить эти классы и сказать Symfony, чтобы использовать эти классы вместо этого, которые должны быть возможны с помощью параметров:
parameters: security.authentication.listener.anonymous.class: Acme\DemoBundle \Security\Http\Firewall\AcmeAnonymousAuthenticationListener
Однако я не уверен, какие параметры мне нужно установить для загрузки расширенных классов вместо ядра.
Наконец я нашел ответ на этот вопрос.
Во-первых, если вам нужно выяснить, какие классы переопределить, перейдите к:
symfony/src/Symfony/Bundle/FrameworkBundle/Resources/%Your file to override%.xml
Там вы найдете список возможных классов Symfony, которые могут быть расширены / отменены.
Затем в ваш config.yml add (я решил поместить мой в расширенное пространство имен):
parameters: twig.extension.trans.class: Extend\Symfony\Bridge\Twig\Extension\TranslationExtension translation.loader.yml.class: Extend\Symfony\Component\Translation\Loader\YamlFileLoader translator.class: Extend\Symfony\Bundle\FrameworkBundle\Translation\Translator
Наконец, в моем composer.json:
"autoload": { "psr-0": { "": "src/", "Extend\\Symfony": "/path/to/your/symfony/classes" } },