フォーム/コントローラ工場(FactoryInterfaceを実装している工場)からコントローラプラグインにアクセスできますか?zf2 - フォーム/コントローラ工場でコントローラプラグインを取得する
リクエストパラメータに応じてフォームアクションを設定するフォームファクトリがありますが、configに定義されているルートからurlにアクセスする必要があります。
コントローラに私は、URLのコントローラプラグイン使用するのに対し、だから:私は工場でこれにアクセスする方法を...
$form->setAttribute('action', $this->url()->fromRoute('appointment.add', array('clientId' => $clientId)));
を?例えばのようなもの:あなたはあなたの工場で\ Zendの\ MVC \コントローラ\ PluginManagerのインスタンスを作成することができ、簡単にURLを取得したり、あなたが好きなプラグインすることができます
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