Zendframework 2 - сохранение папки пользовательской библиотеки

В Zendframework-1 мы обычно сохраняем настроенный код в папке с библиотекой (параллельно с папкой приложения) почти с использованием той же структуры папок, что и библиотека фреймворка zend (vendor) для создания плагина или расширения основной библиотеки.

В zend framework 2 изменяется структура папок. Основная библиотека zend vendor перемещается в папке Vendor, а папка приложения перемещается в папку Module (root).

Мой вопрос в том, что это лучшее место для сохранения пользовательской папки с библиотекой плагинов/кодов в ZF2?

Кто-нибудь еще прошел эту фазу?

Ответ 1

Зависит от цели вашей библиотеки

Случай 1, , используемый многими модулями:
Поместите его в папку поставщика, убедитесь, что он совместим с PSR-0, что упрощает автозагрузку.

Случай 2, , используемый только одним модулем:
Поместите его под modules/your_module/src и отредактируйте метод Module.php getAutoloaderConfig(), чтобы он был автоматически загружен.

....

class Module {

....

public function getAutoloaderConfig()
{
    return array(
        'Zend\Loader\ClassMapAutoloader' => array(
            __DIR__ . '/autoload_classmap.php',      // classmap for production usage
        ),
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, // your module files autoloading (development usage and fallback)
                'library_namespace' => __DIR__ . '/src/librarys_namespace/potential_subfolder', // your library files autoloading (development usage and fallback). eg: 'acme' => '/src/acme/library' for acme namespace
            ),
        ),
    );
}

....

Случай 3, ваша библиотека - сторонний модуль:
Поместите его в папку поставщика, см. ZfcUser

Я думаю, что ваш случай использования больше всего понравится случаю 1, ваша библиотека изменяет поведение, например. Zend\Mvc\Controller\AbstractActionController или дополнительные плагины. Но, если плагин используется только одним модулем, вам лучше разместить его параллельно вашему модулю, как описано в примере 2.

Ответ 2

./vendor, если ваш код имеет общие цели (например, классы, такие как StdClass, ArrayAccess, Iterator и т.д.). Короче говоря, если эти классы необходимы для работы модулей, они должны находиться внутри поставщика.

./module Если ваши плагины/код предназначены для определенной цели (и автономной), вы можете оценить, является ли он модулем или нет (например: ZF-Commons сторонние модули/плагины, такие как ZfcUser)