2012-12-04 43 views
5

私のtwigテンプレートに削除リンクがあり、確認ダイアログを表示するSymfony2の方法があるかどうかを知りたいと思います。SymfonyとTwig:確認ダイアログを表示する方法

これはJQueryでは可能ですが、symfonyには独自の「やり方」があると思います。

ありがとうございます。

+0

symfony2にはそんなことはありません。 –

+0

@habeebperwad、ご意見ありがとうございます。 –

答えて

11

ちょうどあなたの削除リンクに

<a href="{{ path('delete_route', {csrf:...}) }}" onclick="return confirm('are u sure?')">delete</a> 
+1

ありがとうございました、私はそれを追加しましたが、[OK]または[キャンセル]をクリックすると結果は同じになり、コントローラは削除アクションを処理します。 –

+1

このリンクにバインドされている追加のクリックハンドラーはありますか?キャンセルボタンがクリックされ、 'confirm( '本当ですか?')でfalseが返された場合、ブラウザはページを削除しません。 – Ziumin

+0

実際、削除リンクは画像ボタンに埋め込まれています。私は私の削除ボタンの小枝のコードで私の質問を編集します。 –

5

confirm javascript関数を使用して、私はこのトピックは少し古いです知っているが、私は、オブジェクトを削除する前に確認メッセージを表示するには、別の方法を使用していました。

私は、javascript以外のソリューションを探している人たちと分かち合うのは面白いと思います。

これはもう少し複雑で、少なくとも上記の解決策よりも長くなっています。

最初に私は私ののcontrolerに

public function confirmAction(Capteur $myobject) { 
    // check my object exist 
    if (!$myobject) { 
     // throw error 
    } else { 
     // you can pass information about your object to the confirmation message 
     $myobjectInfo = array(
      'yes' => 'path_if_confirm', // path to the deleteAction, required 
      'no' => 'path_if_dont_confirm', // path if cancel delete, required 
      // put any information here. I used type, name and id 
      // but you can add what you want 
      'type' => 'mytype', 
      'id' => $myobject->getId(), // required for deleteAction path 
      'name' => $myobject->getName() 
     ); 
     // add informations to session variable 
     $this->get('session')->set('confirmation',$myobjectInfo); 
     return $this->redirect($this->generateUrl('confirmation_template_path')); 
    } 
} 
public function deleteAction(MyType $myobject) { 
    if (!$myobject) { 
     // throw exception 
    } else { 
     $request = $this->get('request'); 
     if ($request->getMethod() == 'POST') { 
      $em = $this->getDoctrine()->getManager(); 
      $em->remove($myobject); 
      $em->flush(); 
      $this->get('session')->getFlashBag()->add('success', 'Nice shot.'); 
     } else { 
       // you can do something here if someone type the direct delete url. 
     } 
    } 
    return $this->redirect($this->generateUrl('where_you_want_to_go'));  
} 

をこれらのアクションを追加しますので、オブジェクトの私のリストと私のテンプレートでは、私がconfirmActionに削除ボタンをポイントします。

その後confirmation_template中(または上の親テンプレートlayout.hml.twigで私の場合)私はこの

{% if app.session.get('confirmation') is defined and app.session.get('confirmation') is not null %} 
    <div> 
     <p> 
     put your message here. You can use information passed to the session variable {{ app.session.get('confirmation').type }} {{ app.session.get('confirmation').name }} {{ app.session.get('confirmation').id }} etc.. 
     </p> 
     <form method="post" action="{{ path(app.session.get('confirmation').yes,{'id':app.session.get('confirmation').id }) }}"> 
      <button type="submit" class="btn red">confirm and delete</button> 
     <a href="{{ path(app.session.get('confirmation').no) }}" class="btn blue">Cancel</a> 
     </form> 
    </div> 
    # put confirmation variable to null, to disable the message after this page # 
    {{ app.session.set('confirmation',null) }} 
{% endif %} 

を追加し、私はのためにメッセージを再利用するためには、私の上位テンプレートでこれらの小枝コードを置きます私が望むどんなオブジェクト。別の種類のオブジェクトを削除したい場合は、セッション変数に渡された情報をカスタムメッセージとパシュに使用します。 直接URLに移動すると、オブジェクトは削除されません。

それを行うのが最善の方法かどうかはわかりません。あなたのアドバイスは高く評価されます。

ありがとうございました。

関連する問題