2014-07-21 26 views
1

我是新來的使用作曲家,並在我的composer.json文件中創建了所需項目的列表。我可以在我的index.php bootstrap文件中使用它們。作曲家PSR-4的應用文件

但是我希望能夠使用composers autoloader自動加載我自己的項目文件以外的供應商文件夾。我的文件夾結構如下:

vendor/ 
project/ 
    Project.php 
index.php 
composer.json 

的index.php

<?php 

require 'vendor/autoload.php'; 

new \Project\Project; 

Project.php

<?php 

namespace Project; 

class Project { 
} 

composer.json

{ 
    "autoload": { 
     "psr-4": { 
      "Project\\": "project" 
     } 
    } 
} 

這使得未來與以下錯誤:

Fatal error: Class 'Product\Product' not found in index.php on line 5 

我到底做錯了什麼?或者我不能使用作曲家自動加載來加載我的應用程序文件?

編輯 原來我需要運行composer dump-auto -o刷新我的composer.json文件所做的更改。感謝發佈在評論中的@Quasduck。

+0

您正在聲明的名稱空間與正在使用的名稱空間之間似乎存在斷開連接。你確定你想要實例化的類不應該是「Project \ Product \ Product」嗎? –

+0

它應該是'new \ Project \ Project;' - 沒有後綴'.php'。還要確保在composer.json的autoload部分進行更改後,不要忘記運行'composer dump-auto -o' - 該產品的東西來自哪裏?是否有產品類別涉及到任何地方? – Quasdunk

+0

@Quasdunk .php是SO上的拼寫錯誤,並且不是代碼本身。當我運行您建議的'composer dump-auto -o',並且該類加載正常時,問題得到解決:) – Ozzy

回答

3

發佈我的評論作爲一個答案

每當你與你的composer.json文件中自動加載的部分修補,始終確保運行

$ composer dump-autoload -o 

更新後自動加載機,這也是運行每個composer updatecomposer install後自動。

另請注意(可選,但推薦)-o param,它告訴Composer優化自動加載。這基本上意味着PSR-0/4自動加載(如你的例子)被轉換爲簡單的classmaps。這可以顯着加速自動加載,尤其是在大型項目中。

更新自動加載器還可以解決更新,重命名或移動類時的問題,但您的應用程序似乎沒有提及。

+0

我想質疑有關'-o'的評論。我給出了一些原因,爲什麼這是不正確的一般在http://stackoverflow.com/questions/22803419/why-use-a-psr-0-or-psr-4-autoload-in-composer-if-classmap-實際上是更快/ 22823995#22823995 – Sven

+0

@Sven謝謝你的提示,我其實沒有想到這一點。雖然非常有趣的問題! – Quasdunk