2014-02-17 74 views
0

我會用一個例子來問這個問題。 說我有這樣的項目目錄。psr-0和composer如何工作?

project 

    vendor 

     samplevendor 

    src 

    composer.json 

首先,我想知道有沒有放在composer.json文件在項目目錄正確,才能在供應商目錄中安裝庫?第二,說我有以下行composer.json

"autoload":{ 
     "psr-0": { 
       "samplevendor\\package": "lib/" 
       } 
      } 

那麼作曲家會在哪裏配置自動加載以查找有關項目根目錄的samplevendor \ package \ sampleclass類? 我問這個已經出現在Symfony2的composer.locked文件中以下行後:

"autoload": { 
      "psr-0": { 
       "Doctrine\\Common\\Annotations\\": "lib/" 
      } 
     } 

更新:我發現在autoload_namespaces.php相應的命名空間地圖,只是似乎並不符合PSR- 0:

'學說\ COMMON \批註\'=>陣列($ vendorDir '/教義/註解/ lib目錄')

回答

1

或許您可以根據需要放置composer.json項目中的任何地方,但對於一個純PHP(和HTML/CSS/JS)項目,將文件放在最頂端的目錄是最好的辦法ectory。這樣,如果你創建一個庫或者想要一些其他好的副作用,Composer就能找到它。 (其中有很多不會直接影響Composer或軟件的工作方式)。

通過運行composer init創建初始composer.json是一個好主意。作曲家會問你一個供應商名稱和軟件名稱。我建議你在這裏給出一個合理的答案。此外,您可以將自己添加爲開發人員,現在添加一些依賴項(不一定需要),最後創建初始文件。

PSR-0自動加載意味着該命名空間或類名(還記得那些Underscore_Classname_Namespace_Emulation)給定的前綴是在目錄中搜索,即名爲\Namespace\Class被配置爲"psr-0": {"Namespace\\": "src"}類將位於srv/Namespace/Class.php(如果該文件不存在,也許另一個組件可以加載該確切的類,所以自動加載不會立即失敗 - Composer將註冊該故障並查看後面的自動加載定義是否可以加載它)。

事實上,您在autoload_namespaces.php文件中看到所需庫的不同定義是正確的。 Composer必須從位於vendor之內的不同目錄加載這些文件,並且您自己的類將從composer.json文件的自動加載部分中給出的位置自動加載。