0

У меня есть базовое знание ZF2 для создания обычных проектов. Теперь я хочу создать модуль, который расширяется сообществом пользователей, создавая плагины для его функций.zf2: модуль с подключаемым подключаемым модулем

Я создал базовую архитектуру как

ModuleName 
    src 
     Service 
      MyService.php 
     Factory 
      Fun1Factory.php 
      Fun2Factory.php 
     Plugins 
      Fun1Plugins 
       PluginA.php 
       PluginB.php 
      Fun2Plugins 
       PluginC.php 
       PluginD.php 

я создал две фабрики классов (не из ZF2 factoryinterface) для обработки каждого типа функциональности, как Fun1Factory.php & Fun2Factory.php. Оба они зарегистрированы в module.config.php через invokables.

'invokables' => array (
    'Fun1Factory' => 'ModuleName\Factory\Fun1Factory', 
    'Fun2Factory' => 'ModuleName\Factory\Fun2Factory', 
) 

Теперь MyService фактически называет их аргументами для определенных плагинов. Как показано ниже.

$fun1Factory = $this->getServiceLocator()->get('Fun1Factory'); 
$fun1Factory->setSettings($settings['fun1']); 
$this->fun1Plugin = $fun1Factory->getPlugin(); 
$this->fun1Plugin->init(); 

$fun2Factory = $this->getServiceLocator()->get('Fun2Factory'); 
$fun2Factory->setSettings($settings['fun2']); 
$this->fun2Plugin = $fun2Factory->getPlugin(); 
$this->fun2Plugin->init(); 

Так код можно назвать как то

$service = $this->getServiceLocator()->get('ModuleName\Service\MyService'); 
$service->init(array('fun1' => 'pluginA', 'fun2' => 'pluginD')); 

я раньше построен аналогичен с использованием базовой MVC + Factory Pattern. Но я не знаю, как это должно быть встроено в ZF2. ZF2 предоставляет фабричный интерфейс, но это похоже на автозагрузку некоторых сервисов/контроллеров. Если это какое-нибудь руководство, как создать такой модуль?

UPDATE: Я могу сделать заводской код также в классе MyService. Но я думаю о «ZF2 WAY» для этого.

ПОДРОБНОЕ ОПИСАНИЕ: У меня есть вопрос о обновлении более подробной информации. Ближайший я нашел по адресу https://samsonasik.wordpress.com/2014/01/29/zend-framework-2-getting-closer-with-pluginmanager/. Но мне все еще нужно динамически регистрировать плагин на фабрике, а не статически там, как показано ниже.

protected $invokableClasses = array(
    //represent invokables key 
    'xls' => 'Tutorial\Plugin\Xls', 
    'pdf' => 'Tutorial\Plugin\Pdf' 
); 

ответ

0

Если вы не хотите плагин создатели того, чтобы изменить service_manager в module.config.php то у вас есть два варианта:

Опцион создающей Factory для MyService, который будет искать его зависимостей в этих плагиновых папках.

Другой вариант будет создавать метод вызова для MyService, передающий плагин в качестве аргумента, а затем вы создаете экземпляр плагина.

Но способ, которым работает zf2, использует module.config.php для регистрации экземпляров в service_manager. Поэтому, если создатели плагинов могут использовать service_manager, это будет лучше.

[ОБНОВЛЕНИЕ]

Зенд FactoryInterface используется для создания экземпляров, которые имеют зависимости, поэтому эта зависимость создана или извлечена из ServiceManager, а затем они вводятся с помощью конструкторы к экземпляру завод был создан для.

В вашем случае разработчикам плагинов необходимо будет создать фабрики для своих плагинов и зарегистрировать эти заводы в service_manager. Если они этого не сделали, вам нужен способ узнать, имеет ли плагин зависимости.

Надеется, что это помогает

Исмаэль Trascastro

+0

Я обновил мой вопрос, чтобы показать больше деталей. –

+0

Zend FactoryInterface используется для создания экземпляров с зависимостями, поэтому эти зависимости создаются или извлекаются из ServiceManager, а затем они вводятся через конструктор в экземпляр, для которого был создан завод. – itrascastro

+0

Я также обновил свой ответ – itrascastro

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