Composer - Autoload и PSR-0 vs PSR-4
Я начинаю изучать Composer, и я разрабатываю систему, в которой разделяю файлы основных файлов приложения, следующим образом:
/ root |-- /src |-- /App |-- /DBConfig |-- /Controller |-- /Model |-- /Core |-- /Helper |-- /Controller |-- /Model
Итак, чтобы установить этот параметр в файле composer.json и получить доступ к всех классов, как /App и /Core бы таким образом?
"autoload" : { "psr-X" : { "App\\" : "/src", "Core\\" : "/src" } }
) Или есть более правильный путь?
Я читал, также, о PSR-0 vs PSR-4, и я все еще немного сомневаюсь, которой использовать. В данном моем случае, что я должен реализовать, PSR-0 или PSR-4?
2 answers
Разница В том, что с PSR-0 autoloader будет искать папку с именем из пространства имен, которые вы настроили в каталоге в курсе, и с PSR-4 он будет использовать папку, которую вы создали как папку собственном пространстве имен.
, Например PSR-0:
{
"autoload": {
"psr-0": {
"Zend\\": "vendor"
}
}
}
Автопогрузчик будет искать в папке Zend
, соответствующем пространстве имен Zend
"внутри папки" vendor
. Например, в пространстве имен \Zend\Acl\Acl
, будет соответствовать файл
vendor/Zend/Acl/Acl.php
.
Если бы у вас был настроен путь, как vendor/Zend
файл, который автопогрузчик попытается загрузить будет выглядеть так: vendor/Zend/Zend/Acl/Acl.php
.
, Например PSR-4:
{
"autoload": {
"psr-4": {
"Zend\\": "vendor/Zend"
}
}
}
Автопогрузчик будет использовать папку " vendor/Zend
как папку пространства имен Zend
, namespace \Zend\Acl\Acl
будет соответствовать файл vendor/Zend/Acl/Acl.php
.
Другой пример PSR-4:
{
"autoload": {
"psr-4": {
"Zend\\": "algumacoisaqualquer/maisoutracoisaqualquer"
}
}
}
Автопогрузчик будет использовать папку algumacoisaqualquer/maisoutracoisaqualquer
как папку пространства имен Zend
, namespace \Zend\Acl\Acl
будет соответствовать файл algumacoisaqualquer/maisoutracoisaqualquer/Acl/Acl.php
.
Источников:
Будет ситуация. В случае, если пространство имен, перейдите к папке, где первые номенклатуры отличаются, PSR-4. Пример:
MyLib/
LibComponents/
Component1/
Component2/
...
Но имен этих компонентов, а не начинают с MyLib, начинающиеся с Lib, дай вам указывает на Composer:
{
"autoload": {
"psr-4": {
"Lib\\": "vendor/some-lib/some-lib/libs/MyLib/"
}
}
}
Я Считаю, что есть более правильный путь, будет необходимости.
В вашем случае:
{
"autoload": {
"psr-4": {
"App\\": "src/App/",
"Core\\": "src/Core/"
}
}
}