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?

Author: Maniero, 2014-06-04

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.

Источников:

 28
Author: Édipo Costa Rebouças, 2017-01-31 19:27:56

Будет ситуация. В случае, если пространство имен, перейдите к папке, где первые номенклатуры отличаются, 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/"
        }
    }
}
 11
Author: Gabriel Jacinto, 2014-06-04 22:47:14