2012-12-04 59 views
5

我在我的樹枝模板中有一個刪除鏈接,我想知道是否有Symfony2顯示確認對話框的方式。Symfony和Twig:如何顯示確認對話框

我知道這是可能的JQuery,但也許symfony有他自己的「做的方式」。

謝謝。

+0

我不認爲在symfony2中有這樣的事情。 –

+0

@habeebperwad,謝謝你的意見。 –

回答

11

只需使用confirm JavaScript函數您刪除鏈接

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

謝謝,我補充說,但如果我點擊確定或取消,結果是一樣的,我的控制器將處理刪除操作。 –

+1

你有任何額外的點擊處理程序綁定到此鏈接?如果點擊取消按鈕,您的瀏覽器就不應該進入刪除頁面,並且'confirm('是您確定?')返回的錯誤'' – Ziumin

+0

實際上,刪除鏈接嵌入在圖像按鈕中。我將用我的刪除按鈕的樹枝代碼編輯我的問題。 –

5

在我知道這個題目是有點老,但我用另一種方式來顯示確認消息之前刪除的對象。

我覺得很有趣與人們分享尋找另一種解決方案比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,您的對象將不會被刪除。

我不知道這是否是最好的方法。您的意見將不勝感激。

謝謝。