composerを使ってautoload.phpへのパスを定義する方法
-
21-12-2019 - |
質問
Composerプロジェクトを持っている、それをMyVendor\Database
に呼び出します。そのプロジェクトはComposerとオートロードを使用します。そのプロジェクトにはいくつかのファイルがあります。
require_once __DIR__."/../vendor/autoload.php";
.
オートローディングを利用するために
他のプロジェクトにMyVendor\Database
を含めるまで、それはすべてうまく機能します。
私は別のプロジェクトを持っています、MyVendor\CoolPackage
を必要とするMyVendor\Database
を呼び出します。
CoolPackage
にComposerのインストールを実行し、MyVendor\Database
をベンダーフォルダにダウンロードします。
ここからの問題は、vendor\MyVendor\Database
を呼び出すため、require_once __DIR__."/../vendor/autoload.php"
内のマイファイルは失敗しますが、\vendor\MyVendor\Database
の内部にはベンダーフォルダはありません。
解決
composer.json
では、オートロード方式を定義します。あなたが今自分自身を見つけた理由で、そのアプリケーションやモジュールの中にも、そのアプリケーションやモジュールだけでなく他のアプリケーションでも、オートロード可能であると思われるファイルの内部でオートロードを呼び出すことをお勧めします。
基本的には、PSR-0または4のオートロードの定義に基づいて、任意のコンポーネントプロジェクトのファイルを分割する必要があります。副作用のないクラスまたは関数の宣言だけ(コードを実行する)、またはコードを実行しないでください。クラスや関数の定義前のファイルのみをオートロードできます(関数を除く、files
AutoLoadセクションでそれらを含むファイルをロードすることによって常に宣言することができるだけであろう)、後者はオートローブされるべきではありません。
と比較的簡単になるはずです:このコンポーネントが別のアプリケーションに含まれているときに、オートロードできるすべてのクラスも使用できます。クラスではない他のものは直接使用できません。