-->

Symfony的2.1扩展核心类(Symfony 2.1 Extending Core Classe

2019-09-23 14:02发布

我试图重写我自己的核心Symfony的组件。 我使用的方法是:

"autoload": {
    "psr-0": { 
                "": "src/",
                "Symfony": "src/vendor/symfony/src/"
             }
}

然而,当我运行作曲家更新并安装它似乎从来没有考虑到这一点。 这是不给力的磁带自动加载机Symfony的核心之前寻找到另一个目录第一个正确的方法是什么?

任何指针感激!

编辑:道路向文件

SRC /供应商/ symfony中/ src目录/ Symfony的/桥梁/嫩枝/分机/ TranslationExtension.php

SRC /供应商/ symfony的/ SRC / Symfony的/组件/翻译/ Translator.php SRC /供应商/ symfony的/ SRC / Symfony的/组件/翻译/装载机/ 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/'),

一切工作,因为它是为了。 所以现在基本上是寻找解决办法,为什么作曲家不正确取景。

编辑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

但是我不知道我需要设置加载到位核心的扩展类的什么参数。

Answer 1:

我终于找到了答案。

首先,如果你需要找出要覆盖类,请访问:

symfony/src/Symfony/Bundle/FrameworkBundle/Resources/%Your file to override%.xml

在那里,你会发现,可以扩展/覆盖可能的Symfony类的列表。

然后在你的config.yml加(我选择了把矿在扩展命名空间):

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"
             }
},


文章来源: Symfony 2.1 Extending Core Classes