Symfony2 のコア クラスをオーバーライドしたいと考えています。
具体的には、vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateReference.php、TemplateReference をオーバーライドして、テンプレートを見つける場所を変更できるようにしたい..これは可能ですか?
Symfony2 のコア クラスをオーバーライドしたいと考えています。
具体的には、vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateReference.php、TemplateReference をオーバーライドして、テンプレートを見つける場所を変更できるようにしたい..これは可能ですか?
自分が何をしているのかを正確に理解していて、何かを壊さないことが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
サービスとして定義されたいくつかのクラスを簡単にオーバーライドし (app/cache/dev/appDevDebugProejctContainer.xml で確認できます)、parameter.ini でサービス名をオーバーライドできます。
ただし、クラスがこのように定義されていない場合は、composer の更新後に適用する独自の「パッチ」を作成できます。
多くの人がコアクラスを編集するのは汚いと言うでしょうが、良いパフォーマンスが必要な場合、それを達成するための唯一の解決策であることがよくあります;-)、そのシンプルで高速で簡単です.
他のソリューションは大歓迎です..