0

是否可以从表单/控制器工厂(任何实现 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;
    }
4

2 回答 2

1

在非控制器上下文中使用控制器插件不是一个好习惯。要使用 ZF2 路由器组装 URL,您只需使用在ServiceManager.

$router = $serviceManager->get('HttpRouter');
$url = $router->assemble(['clientId' => $clientId], ['name' => 'appointment.add']);
于 2017-04-22T11:17:10.933 回答
0

您可以在工厂中创建 \Zend\Mvc\Controller\PluginManager 的实例,并且可以轻松获取 url 或任何您想要的插件。只是一个小问题,你不能在插件管理器中设置你的控制器。因此,依赖于控制器的插件将无法正常工作。

于 2017-04-22T09:53:29.270 回答