[英]Composer PSR-0 autoloading dont work
我的應用程序自動加載模塊控制器類有問題。 我嘗試配置composer.json但仍然無法正常工作。 可能我正在做這個目錄結構的錯誤。 我嘗試了作曲家doc的例子,但又一次不工作......
目錄結構:
|- admin
|----- modules
|--------- Menu
|------------Controller
|--------------MenuController.php
讓我們看看composer.json
{
"autoload": {
"psr-0": { "Admin\\Modules\\": "" }
}
}
我嘗試設置路徑,但沒有再次//“Admin \\ Modules \\”:“admin / modules”
菜單控制器 :
namespace Admin\Modules\Menu\Controller;
class MenuController extends AbstractAdminBaseController
FrontController
require 'vendor/autoload.php';
new \Admin\Modules\Menu\Controller\MenuController();
所有時間都沒有找到。 我嘗試了谷歌的100個例子,沒有。 如何減緩這個問題的任何例子? 謝謝
更新結構:
├───admin
│ └───modules
│ └───Menu
│ └───controller
│ └───MenuController.php
├───vednor
│ └───autoload.php
│ └───composer
│ └───autoload_classmap.php
│ └───autoload_namespaces.php
│ └───autoload_psr4.php
│ └───autoload_real.php
│ └───ClassLoader.php
├───public
├───assets
├───index.php
├───composer.json
├───composer.lock
你的PSR-0永遠不會工作,因為這個標准規定文件的路徑必須與類名完全一樣。 請注意,命名空間的第一部分是“Admin”,但第一個目錄部分只是“admin” - 案例必須完全匹配,否則它將不起作用(或僅適用於不區分大小寫的文件系統)。
但是,您將成功使用PSR-4。 為什么? 因為使用PSR-4,將從完整的類名中刪除給定的名稱空間前綴,其余的將被轉換為在為名稱空間前綴指定的目錄中搜索的路徑。
案例示例:
"autoload": {
"psr-0": { "Admin\\Modules\\": "" }
}
無法工作,因為文件位於路徑admin/modules
,但必須位於Admin/Modules
。
"autoload": {
"psr-4": { "Admin\\Modules\\": "admin/modules/" }
}
將起作用,因為刪除了前綴Admin\\Modules\\
,並將剩余的類名轉換為路徑並添加到admin/modules
。
啊,有一個問題! 它不起作用,因為你選擇命名類...\\Controller\\...
,但路徑再次.../controller/...
老實說,我強烈建議將您的文件名和位置轉換為PSR-4兼容性,即使對於您可以使用Composer解決的前綴目錄也是如此。 這將消除我看到的令人驚訝的小寫目錄結構。
我的意思是:如果位於那里的每個類都是Controller
那么為什么controller
目錄首先是小寫? 我真的無法理解這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.