コンポーザーのオートローダーをMagentoに統合する


19

そのため、composer素晴らしく、Magento拡張機能の作成を容易にする多くのコードがcomposerのpackagistリポジトリにあります。

私が直面している問題は、オートロードを(きれいに)設定するのに最適な方法です。

デフォルトでは、composerパッケージは/ vendorにインストールされ、そのディレクトリ内には、composer管理パッケージのクラスローディングを設定するautoload.phpファイルがあります。

では、composerの '/vendor/autoload.php'ファイルをrequire_onceする最良の方法は何でしょうか?これは、ウェブストアとシェルスクリプトの両方で機能する必要があります。require_onceを実行するためにタップできるオブザーバーイベントはありますか?

乾杯!


ここでgithub.com/magento-hackathon/magento-composer-installerが役立つかどうかはわかりません。かなり無関係だと思います。コンポーザーを使用して非マゼンタパッケージをインストールし、基本的にそれらをlib /に入れたいと思うと思います
アレックス

ええ、選択すれば、composerをlibにインストールするように設定できますが、可能であれば、composer libs / mage libsを別々にしたいです。また、composerでは、Mageオートローダーメカニズムに適合しないクラスマップオートロードなど、きちんとしたものを使用できます。
アーロンボナー

1
+1。Mage.phpからの初期イベントディスパッチの1つがトリックを行う必要があるようです...?
カレンヨルダン

これはかなり前に回答されたことを知っていますが、別のオプションはベンダーのオートローダーをindex.phpファイルに含めることです(前require_once $mageFilenameに呼び出されます)。これはクライアントのインストールでうまく機能し、ファイルの書き換えは一切必要ありません。
ジョセフ、SwiftOtter

さて、コアファイルindex.phpをハッキングしています。アップグレードするとき、そのコード行をindex.phpに追加したことを覚えておく必要があります。
アーロンボナー

回答:


15

Magentoオートローダーはに登録されていMage.phpます。

独自のモジュールでこれを行いたい場合は、可能な最初のイベントを取得し、オートローダーが必要です

アランの分析によれば、これはそうなるでしょうresource_get_tablename-しかし、あなたはあなたがこのイベントを一度だけ処理することを確認しなければなりません。

手っ取り早い解決策は、パッチを適用することですMage.php(ファイルの最初の部分)-しかし、これはコアをハッキングしています。

また、Magento-PSR-0-Autoloaderモジュールもあります。これは、configを介してオートロードする作曲家を追加する方法を提供します。resource_get_tablenameイベントを利用する基本的な実装です。


アレックス、ありがとう。私はmage.phpにパッチを適用しましたが、それを本番環境に入れたくありませんでした。resource_get_tablenameを観察するとうまくいきました!
アーロンボナー

4
Vinaiは、Varien_Autoloadをローカルコードプールに配置し、必要なコードをそこに配置して、高価なオブザーバーイベントとコアコードの直接パッチを回避するという素晴らしい提案もありました。
アーロンボナー

1
「シンプル上記の例の実装:github.com/thijssnowcountry/magento1_composer_loader」 - @ user2594875
ファビアンSchmengler
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.