作曲家からのpsr-4
オートローダーを使用します。
"autoload": {
"psr-4": {
"DG\\Munchkin\\": "src/DG/Munch/"
}
}
これは/var/www/html/xxx/vendor/yyy/src/DG/Munch
からクラスをロードします
しかし、どのようにして/var/www/html/xxx/
からクラスをロードできますか?
独自のオートローダーを作成しましたが、vendor/autoload.php
(コンポーザーオートロード)とオートローダーが必要な場合、独自のオートローダーでクラスのインスタンスを作成するまで機能しません。
src
ディレクトリはプロジェクトルートにあります。 vendor
ディレクトリと同じレベルにあります。
定義する場合
"autoload": {
"psr-4": {
"DG\\Munchkin\\": "src/DG/Munch/"
}
}
あなたが述べたように、これは/var/www/html/xxx/vendor/yyy/src/DG/Munch
からクラスをロードしません。
プロジェクト構造は次のとおりです。
/var/www/html/
+- /xxx (project)
- composer.json
+- /src
+- DG
+- Munch
+- /vendor
- autoload.php
+- vendor-projectA
+- vendor-projectB
+- yyy
\DG\Munchkin
名前空間は内部のクラスにマッピングされます
/var/www/html/xxx/src/DG/Munch
(内部ではない)
/var/www/html/xxx/vendor/yyy/src/DG/Munch
。
しかし、どうすれば/ var/www/html/xxx /からクラスをロードできますか?
プロジェクトのcomposer.json(/ var/www/html/xxx /内)でパスを定義します。
"autoload": {
"psr-4": {
"ProjectRoot\\" : "",
"NamspaceInSourceDir\\" : "src/"
}
}
または、index.phpでcomposerオートローダーをロードするか、bootstrapの間に手動でパスを追加します。
$loader = require 'vendor/autoload.php';
$loader->add('Namespace\\Somewhere\\Else\\', __DIR__);
$loader->add('Namespace\\Somewhere\\Else2\\', '/var/www/html/xxx');