2015-01-20 43 views
0

我來自一個CodeIgniter背景,每次創建一個新的控制器時,我都不必通過調用像composer這樣的程序來註冊它。爲什麼您需要通過Laravel中的作曲家手動註冊課程?

爲什麼在Laravel中這是必需的?

+0

你應該不需要手動註冊控制器,當你echo'app_path()'時它說了什麼? – user3158900 2015-01-20 21:03:50

+0

問題是錯誤的。修改它或修改你的假設並刪除問題;) – 2015-01-20 21:55:28

+0

@JarekTkaczyk它怎麼錯了? – dave 2015-01-20 22:20:54

回答

2

這是因爲Laravel在Composer中使用「Classmap」自動加載模式。藉此,它掃描指定的目錄並編譯一個類映射。因此,您需要在添加新類時運行composer dump-autoload,以便它可以更新已編譯的類映射。

但是,使用Laravel自動加載PSR-4相當簡單。這個自動加載標準要求你使用你的類名和文件名來遵循更嚴格的命名空間規則。

要使用PSR-4,您需要將您的命名空間控制器,模型等這樣的:

Yourname\Yourproject\Controllers 
Yourname\Yourprject\Models 

等您還需要改變控制器,模型等目錄被大寫 - 控制器,模型等等 - 匹配命名空間。然後,將它添加到您的composer.json文件:

"autoload": { 
    "psr-4": { 
     "Yourname\\Yourproject\\": "project_dir/app/" 
    } 
} 

這將映射Yourname\Yourproject命名空間的應用程序目錄。因此,例如,要找到類Yourname\Yourproject\Controllers\FooController,Composer將自動知道在app/Controllers/FooController.php中查找。在FooController.php頂部,寫

<?php 
namespace Yourname\Yourproject\Controllers 

class FooController extends \Controller { 
... 

(注:它不需要命名空間Yourname\Yourproject\的一切,它的建議,但一個簡單的Yourproject\也能發揮作用

,您仍然可以還添加了一個自動加載。類映射部分,將用於composer.json不遵循PSR-4,但你需要爲它們運行composer dump-autoload類。

有關在作曲家的各種自動加載模式的詳細信息,see here.

+0

好的答案,這讓我很煩惱,它鼓勵我的開發人員使用項目的類圖方法作爲他們首次引入自動加載。非常煩人的工作!希望他們很快會將Laravel的默認安裝轉換爲完全的psr4。 – scipilot 2015-01-22 10:19:11