У меня есть базовое знание 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'
);
Я обновил мой вопрос, чтобы показать больше деталей. –
Zend FactoryInterface используется для создания экземпляров с зависимостями, поэтому эти зависимости создаются или извлекаются из ServiceManager, а затем они вводятся через конструктор в экземпляр, для которого был создан завод. – itrascastro
Я также обновил свой ответ – itrascastro