[英]Composer with PSR-4 autoloading: classes from namespace not loading
我有以下項目結構:
- root
|- src <- Application specifc source
|- [...]
|- tests
|- [...]
|- Vendor
|- myusername <- shared packages for all projects
|- src
|- MyNamespace
|- File.php
|- autoload.php
|- test.php
|- composer.json
composer.json
已經有了PSR-4條目:
"autoload": {
"psr-4": {
"MyNamespace\\":"myusername/src"
}
}
/Vendor/test.php
<?php
require 'autoload.php';
$file = new MyNamespace\File();
echo $file->isDone();
Vendor/myusername/src/MyNamespace/File.php
<?php
namespace MyNamespace;
class File
{
public function isDone()
{
return 'Done!';
}
}
但我總是致命的錯誤Fatal error: Class 'MyNamespace\\File' not found in [...]
作曲家設置或文件結構是否正確? 我可以做什么?
編輯1:
我可以加載外部供應商
您的代碼有兩個問題。
您使用的是PSR-4錯誤。
他們不再需要在您的文件夾中嵌入命名空間,從而在項目文件夾中創建更清晰的空間。
PSR-0
vendor/<VendorName>/<ProjectName>/src/<NamespaceVendor>/<NamespaceProject>/File.php
PSR-4 (See that they removed the namespaces folders? Because you already reference that in composer.json
vendor/<VendorName>/<ProjectName>/src/File.php
所以在你的情況下它將是:
Vendor/myusername/src/File.php
你的composer.json無效
"MyNamespace\\":"myusername/src"
不包含項目代碼的目錄的完整路徑。 它應該是這樣的:
"autoload": {
"psr-4": {
"MyNamespace\\": "Vendor/myusername/src"
}
}
但是存儲文件的最佳方法是在vendor
目錄之外 ,因為自動下載的庫使用它,而是選擇不同的“開發”目錄:
"autoload": {
"psr-4": {
"MyUsername\\MyProject\\": "src/myusername/myproject/src"
}
}
感謝Sven的評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.