是否可以從窗體/控制器工廠(實現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