2014-09-02 102 views
15

以下問題:我在我的composer.json定義的類映射:作曲類映射自動加載不加載文件夾中的新文件

"autoload": { 
    "classmap": [ 
     "app/controllers", 
     "app/models", 
     "app/helper.php" 
    ] 
} 

然而,當我在「控制器」創建一個新的文件或者「模型「文件夾,它不會加載它們,我總是必須做一個作曲家轉儲自動加載。

這是正確的行爲嗎?我以爲作曲家的自動加載器會監視文件夾中的新文件嗎?

回答

16

是的,這是正確的行爲。如果您希望自動加載新類,則必須使用PSR-0或PSR-4自動加載。

生成類圖需要Composer知道包含某個類的文件名。這隻能通過解析目錄中的所有源代碼並掃描類,接口和特徵定義來完成。

這通常是一個CPU和I/O密集型任務,所以只有在Composer安裝/更新或(按需)轉儲自動加載器時纔會執行此操作,但不會在每個require "vendor/autoload.php";都完成。

請注意,類映射自動加載僅適用於舊版遺留代碼庫,該代碼庫至少未實現PSR-0。它不適用於新代碼 - 除非您想在開發過程中一次又一次地支付自動加載器的價格。

+0

好的......非常感謝! – pyxl 2014-09-03 07:06:12

+0

「請注意,類圖自動加載僅適用於舊版遺留代碼庫,該代碼庫至少未實現PSR-0」。 不完全正確。請參閱dump-autoload的文檔: 「--optimize(-o):將PSR-0/4自動加載轉換爲classmap以獲得更快的自動加載器。特別推薦用於生產,但可能需要一些時間才能運行所以它目前沒有默認完成。「 – spekary 2017-04-15 15:28:18

+0

優化自動裝載器與定義自動裝載方案不同。如果未來版本的PHP提供了對PSR-4的引擎級支持,Composer可能會在優化此類版本時放棄類地圖,但如果該類地圖是定義自動加載的方式,則必須保留類地圖。 – Sven 2017-04-18 21:02:47

6

通過SSH轉到您的服務器的根目錄。現在執行以下操作:

  1. 運行ls列出所有文件。
  2. 你會看到composer.lock文件;用rm composer.lock命令刪除該文件。
  3. 現在運行php composer update命令。

根據您的linux類型,您可能需要運行php-cli composer update

第3步將創建一個新的composer.lock文件,並且所有類將再次加載。無論何時您添加新課程,都可以這樣做。

或:

  1. 運行composer dump-autoload命令。
+1

感謝斯文的編輯 – 2016-01-09 15:41:12

-2

Puedes秋波埃斯特後,胡斯托estaba buscando LO MISMO闕VOSŸlogre encontrar拉respuesta EN埃斯特後:

http://phpenthusiast.com/blog/how-to-autoload-with-composer


你可以看到這篇文章,我只是在尋找與你一樣,並設法找到在這篇文章中的答案:

http://phpenthusiast.com/blog/how-to-autoload-with-composer

+3

請添加更多的答案,而不僅僅是一個鏈接。有時候鏈接不好,答案也不會好。另外,你爲什麼用兩種不同的語言兩次回答? – Chillie 2017-01-23 17:24:22