この問題はよく知られています。lib
クラスはオートローダーを介して排他的にロードされ、次のもの以外は変更できません。
- libより前にチェックされるcodePoolにそれらを完全にコピーします。
- PSR-0オートローダーをインストールし、オートロードクラスマップを指定し、代わりにファイルをそのフォルダー構造に完全にコピーします。[私の現在の解決策]
これらのファイルの多くに潜在的に触れたいので、私は困難な状況にあります-しかし、ストアの健全性と安定性/アップグレード性のために、ライブラリクラス全体をコピーしたくありません。
現在、明らかにこの問題には潜在的な解決策がありますが、それらにはすべて独自の問題があります:
- 行くAOPのルートをとのようなPHPベースのライブラリを使用してゴー!AOP:最後に確認したのは、Magentoクラスが1つだけではなく、コンポーザーオートローダーによってロードされる必要があることです。Flyingmanaはこの分野でいくつかの作業を行いましたが、本番環境で使用する準備ができていないことは間違いなく、私のニーズはより迅速です。また、拡張機能として出荷したいのですが、これにはより多くの作曲家の設定が必要になります。
- AOPルートに進み、ネイティブPHP拡張機能を使用します。おそらく現時点で最も有利ですが、HHVMで動作しないことは言うまでもなく、別の拡張機能をインストールする必要があります。
- PHPのクラスキットおよび/またはrunkitを使用します。これは別のネイティブPHP拡張であるため、上記と同じ問題があります。
- コールサイトにパッチを適用して、独自の名前空間(
\Danslo\Varien_X
)バージョンを使用し、元の()バージョンから拡張し\Varien_X
ます。パッチを当てるコールサイトが多すぎます。オプションではありません。 自分で転がす:できること:
- 独自のオートローダーを作成します。
- 元のクラスを別のフォルダー(
{root_dir}/var/tmp
)にコピーし、ラップしnamespace \Magento { < original contents > }
ます。 - そのファイルを含めます。
- 変更したクラスを含める
OriginalClass extends Magento\OriginalClass {}
これの欠点は明らかです。動的コード生成、正規表現、書き換えられたクラスをロードするための少しのオーバーヘッド。しかし、この時点で、〜100行をタッチ/追加したいだけで、〜5000行のコードをコピーするのに勝ると確信しています。
私は多くを求めていることを知っていますが、この問題を解決するのに役立つ現代的で比較的きれいなものがありますか?