是否可以从窗体/控制器工厂(实现FactoryInterface的任何工厂)访问控制器插件?zf2 - 在窗体/控制器工厂中获取控制器插件
我有一个表单工厂,我想根据请求参数设置表单动作,但需要从config中定义的路由访问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;
}
非常好,那正是我所希望的。我同意你在控制器上下文之外使用插件的原则,然而我认为可能会有一个通用/基础url助手,就像可用的视图助手一样。使用HttpRouter是理想的,谢谢。 –
更可持续的方式是将表单工厂重构为服务。通过服务工厂实例化,传入服务管理器。只是一个练习提示,在那里,做到了 - 我们转而在控制器级别设置动作属性 - 有一些边缘情况下路由器不会包含当前信息,未来的支持工作将更少。 – davmor