1

Symfony2 のコア クラスをオーバーライドしたいと考えています。

具体的には、vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateReference.php、TemplateReference をオーバーライドして、テンプレートを見つける場所を変更できるようにしたい..これは可能ですか?

4

2 に答える 2

7

自分が何をしているのかを正確に理解していて、何かを壊さないことが100%確実でない限り、これを行わないでください...

Symfony 2.0 ClassLoaderコンポーネントを使用している場合:

$loader->registerNamespaces(array(
    'Symfony' => array(
        __DIR__.'/../src/vendor/symfony/src',
        __DIR__.'/../vendor/symfony/src',
        __DIR__.'/../vendor/bundles',
    ),
    ...
));

Composerでこれを行うには、これが機能するはずです。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
于 2012-07-13T07:53:01.433 に答える
0

サービスとして定義されたいくつかのクラスを簡単にオーバーライドし (app/cache/dev/appDevDebugProejctContainer.xml で確認できます)、parameter.ini でサービス名をオーバーライドできます。

ただし、クラスがこのように定義されていない場合は、composer の更新後に適用する独自の「パッチ」を作成できます。

多くの人がコアクラスを編集するのは汚いと言うでしょうが、良いパフォーマンスが必要な場合、それを達成するための唯一の解決策であることがよくあります;-)、そのシンプルで高速で簡単です.

他のソリューションは大歓迎です..

于 2012-08-10T13:02:44.243 に答える