Php Symfony 2.1扩展核心类
我正试图用自己的组件覆盖Symfony的核心组件。我使用的方法是: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内核之前先查看另一个目录的正确方法吗 感谢任何指点 编辑:
"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(我还没有测试过这个,但似乎它可以正常工作)