zf2 - получение плагинов контроллера в форме / фабрике контроллеров
Можно ли получить доступ к плагинам контроллера из фабрики форм / контроллеров (любая фабрика, реализующая FactoryInterface)?
У меня есть фабрика форм, я хочу установить действие формы в зависимости от параметра запроса, но мне нужно получить доступ к URL-адресу из маршрута, определенного в конфигурации.
Так что в то время как в контроллере я бы использовал плагин контроллера URL:
$form->setAttribute('action', $this->url()->fromRoute('appointment.add', array('clientId' => $clientId)));
... как я могу получить доступ к этому на заводе? например что-то вроде:
class MyFormFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator){
$serviceManager = $serviceLocator->getServiceLocator();
//...snip...
$form = new AddAppointmentForm($client);
$serviceManager->get('ControllerPluginManager');
$url = $controllerPluginManager->get('Url');
die($url->fromRoute('appointment.add', ['clientId' => $clientId]));
return $form;
}
2 ответа
Не рекомендуется использовать подключаемые модули контроллера в неконтролируемом контексте. Чтобы собрать URL с маршрутизатором ZF2, вы можете просто использовать маршрутизатор, который также доступен в ServiceManager
,
$router = $serviceManager->get('HttpRouter');
$url = $router->assemble(['clientId' => $clientId], ['name' => 'appointment.add']);
Вы можете создать экземпляр \Zend\Mvc\Controller\PluginManager на своей фабрике и легко получить URL или любой другой плагин, который вы хотите. Просто небольшая проблема, вы не можете установить свой контроллер в менеджере плагинов. Таким образом, зависимый от контроллера плагин НЕ будет работать должным образом.