Php Symfony 2.1扩展核心类

Php Symfony 2.1扩展核心类,php,symfony,symfony-2.1,composer-php,Php,Symfony,Symfony 2.1,Composer Php,我正试图用自己的组件覆盖Symfony的核心组件。我使用的方法是: "autoload": { "psr-0": { "": "src/", "Symfony": "src/vendor/symfony/src/" } } 然而,当我运行composer update并安装时,它似乎从未考虑到这一点。这不是强制自动加载程序在Symfony内核之前先查看另一个目录的正确方法吗 感谢任何指点 编辑:

我正试图用自己的组件覆盖Symfony的核心组件。我使用的方法是:

"autoload": {
    "psr-0": { 
                "": "src/",
                "Symfony": "src/vendor/symfony/src/"
             }
}
然而,当我运行composer update并安装时,它似乎从未考虑到这一点。这不是强制自动加载程序在Symfony内核之前先查看另一个目录的正确方法吗

感谢任何指点

编辑:文件的路径

src/vendor/symfony/src/symfony/Bridge/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/',
);
一切都按其本意运转。所以现在它基本上找到了解决作曲家为什么不能正确作曲的方法

编辑2:

进行更多搜索后,上述方法似乎不是一个好的实现:

相反,我需要扩展给定的类,并告诉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中添加(我选择将我的放在扩展名称空间中):

最后,在my composer.json中:

"autoload": {
    "psr-0": { 
                "": "src/",
                "Extend\\Symfony": "/path/to/your/symfony/classes"
             }
},

我终于找到了答案

首先,如果您需要找到要覆盖的类,请转到:

symfony/src/Symfony/Bundle/FrameworkBundle/Resources/%Your file to override%.xml
在那里,您将找到一个可以扩展/重写的可能Symfony类的列表

然后在config.yml中添加(我选择将我的放在扩展名称空间中):

最后,在my composer.json中:

"autoload": {
    "psr-0": { 
                "": "src/",
                "Extend\\Symfony": "/path/to/your/symfony/classes"
             }
},

您的文件在
src/vendor/symfony/src/
中的路径是什么?使用路径编辑我的原始帖子。我想这就是你的意思,如果不让别人知道的话。你还可以包括
vendor/composer/autoload_namespace.php
?添加,看起来路径在那里,它应该在其他路径之前吗?是的,它应该在主路径之前。你的作曲家法尔是最新的吗?您可以通过运行
composer self update
来更新它
src/vendor/symfony/src/
?使用路径编辑我的原始帖子。我想这就是你的意思,如果不让别人知道的话。你还可以包括
vendor/composer/autoload_namespace.php
?添加,看起来路径在那里,它应该在其他路径之前吗?是的,它应该在主路径之前。你的作曲家法尔是最新的吗?您可以通过运行
composer self update
来更新它,这确实是一种更好的方法,依赖名称冲突来覆盖类意味着您无法扩展原始类,但必须复制粘贴整个代码,这并不是最容易维护的解决方案。您应该仍然能够通过简单地将基类称为不同的东西来扩展该类,因此:使用Symfony/path/to/Translator作为SymphonyTranslator。然后,Translator扩展SymfonyTranslator(我没有测试过,但似乎它可以正常工作),这确实是一种更好的方法,依靠名称冲突重写类意味着您无法扩展原始类,但必须复制粘贴整个代码,这并不是最容易维护的解决方案。您应该仍然能够通过简单地将基类称为不同的东西来扩展该类,因此:使用Symfony/path/to/Translator作为SymphonyTranslator。然后,Translator扩展了SymfonyTranslator(我还没有测试过这个,但似乎它可以正常工作)