簡體   English   中英

Composer PSR-0自動加載不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM