ZF2 の ajax フォームの例を長い間探しましたが、明示的なチュートリアルはありません。誰かが私を助けてくれれば、考えます。ajaxを使用してコントロールのアクションを呼び出そうとしています
質問する
1167 次
4 に答える
0
**my view**
$form = $formComment;
)
$form->setAttribute( 'action', '#');
?>
<h4>Leave comment</h4>
<?=$this->form()->openTag( $form )?>
<dl class="zend_form">
<?=$this->formInput ( $form->get( 'id' ) )?>
<div>
<?=$this->formLabel ( $form->get ( 'name' ) )?>
<?=$this->formInput ( $form->get ( 'name' ) )?>
<?=$this->formElementErrors ( $form->get ( 'name' ) )?>
<div id="nameInfo">Please enter your name?</div>
</div>
<div><?=$this->formLabel ( $form->get ( 'email' ) )?>
<?=$this->formInput ( $form->get ( 'email' ) )?>
<?=$this->formElementErrors ( $form->get ( 'email' ) )?>
<div id="emailInfo">Valid E-mail please, you will need it to log
in!</div>
</div>
<div><?=$this->formLabel ( $form->get ( 'site' ) )?>
<?=$this->formInput ( $form->get ( 'site' ) )?>
<?=$this->formElementErrors ( $form->get ( 'site' ) )?>
</div>
<div><?=$this->formLabel ( $form->get ( 'comment' ) )?>
<?=$this->formTextarea ( $form->get ( 'comment' ) )?>
<?=$this->formElementErrors ( $form->get ( 'comment' ) )?>
</div>
<div>
<?=$this->formInput ( $form->get ( 'submit' ) )?>
<?=$this->formElementErrors ( $form->get ( 'submit' ) )?>
</div>
</dl>
<?=$this->form ()->closeTag ( $form )?>
于 2013-06-07T14:32:04.440 に答える
0
Zend フレームワークは、レイアウト テンプレートに従って HTML をレンダリング (出力) します。各アクション コンテンツは、レイアウトに含まれるよりもスニペットであると想定できます。
つまり、AJAX 応答を取得するには、AJAX 呼び出しのレイアウトを無効にするだけです。
レイアウトを無効にするコードをどこに追加すればよいでしょうか。このコードをアプリケーション Module.php に含めるアクションが呼び出される前にこれを行うことができます。呼び出しが AJAX からのものかどうかを確認するイベントを添付します。
public function onBootstrap(EventInterface $e){
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach('dispatch', array($this, 'disableLayout'), 100);
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
}
同じ Module.php の下に関数を追加します
public function disableLayout(EventInterface $event){
$result = $event->getResult();
if ($result instanceof \Zend\View\Model\ViewModel) {
$result->setTerminal($event->getRequest()->isXmlHttpRequest());
//setTerminal(true) disable the layout
}
}
これはそれを行う 1 つの方法であり、さらに多くの方法があります。すべてのリクエストのレイアウトを無効にしたくない場合は、単に setTerminal(true) を設定して、ajax によって呼び出す必要がある任意のアクションで現在のビューモデルを取得できます。リクエスト、これは正しい方向に進むのに役立つ単なる例です
于 2013-06-06T05:43:06.323 に答える