2014-02-17 4 views
0

Я задам вопрос на примере. Скажите, что у меня есть каталог проекта.Как работает psr-0 и композитор?

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:

'Doctrine \ Common \ аннотации \' => массив (. $ vendorDir '/ доктрина/аннотаций/Lib')

ответ

1

Вы, вероятно, можно поместить composer.json в любом месте вашего проекта в зависимости от требований, но и для чистый PHP (и HTML/CSS/JS) проект, это лучшая идея поместить файл в самый верхний каталог ectory. Таким образом, Composer сможет найти его, если вы создадите библиотеку или хотите другие приятные побочные эффекты. (Их много, что напрямую не влияет на работу Composer или вашего программного обеспечения).

Рекомендуется создать начальный composer.json, запустив composer init. Композитор спросит вас о имени поставщика и имени программного обеспечения. Я рекомендую вам дать здесь разумный ответ. Кроме того, вы можете добавить себя как разработчика, добавить некоторые зависимости прямо (необязательно) и, наконец, создать исходный файл.

PSR-0 самозарядные означает, что данный префикс пространства имен или имя класса (помните те Underscore_Classname_Namespace_Emulation) следует искать в каталоге, то есть класс с именем \Namespace\Class, настроенный как "psr-0": {"Namespace\\": "src"} будет располагаться в srv/Namespace/Class.php (если файл не существует, может быть, другой компонент может загрузить этот точный класс, поэтому автозагрузка не будет немедленно терпеть неудачу - Composer зарегистрирует этот сбой и посмотрит, может ли загрузить позднее определение автозагрузки).

Тот факт, что вы видите различные определения в файле autoload_namespaces.php для требуемых библиотек, верен. Композитор должен загружать их из разных каталогов, расположенных внутри vendor, и ваши собственные классы будут автоматически загружены из местоположения, указанного в разделе автозагрузки в файле composer.json.

Смежные вопросы