2017-10-20 43 views
1

J'ai une liste avec les utilisateurs d'un db qui a un bouton de suppression fonctionnant. Voici mon contrôleur:symfony 3 ajouter la boîte de confirmation pour supprimer

<?php 

namespace AppBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use AppBundle\Entity\Users; 
use Symfony\Component\HttpFoundation\File\UploadedFile; 
use Symfony\Component\HttpFoundation\File\File; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\Form\Extension\Core\Type\FileType; 
use Symfony\Component\HttpFoundation\Session\Session; 


class DefaultController extends Controller 
{ 
    /** 
    * @Route("/homepage", name="homepage") 
    */ 
    public function listAction(Request $request) 
    { 
     $users = new Users(); 
     $userssrc = null; 
     $name = null; 
     $session = $request->getSession(); 
     $defaultData = array('message' => 'wut'); 
     $formsearch = $this->createFormBuilder($defaultData) 
       ->add('search', TextType::class, array('label'=>'Suche', 'attr'=>array('class'=>'form-control', 'style'=>'margin-bottom:0.5cm; width:50%;'))) 
       ->add('submit', SubmitType::class, array('label'=>'suchen','attr'=>array('class'=>'btn btn-primary'))) 
       ->add('reset', SubmitType::class, array('label'=>'zurücksetzten', 'attr'=> array('class'=>'btn btn-default'))) 
       ->getForm(); 
     $formsearch->handleRequest($request); 
     if($formsearch->isSubmitted() && $formsearch->isValid()){ 
      $name = $formsearch['search']->getData(); 
      $em=$this->getDoctrine()->getManager(); 
      $query = $em->createQuery(
       'SELECT u 
       FROM AppBundle:Users u 
       WHERE u.vorname = :name 
       OR u.nachname = :name')->setParameter('name', $name); 
      $userssrc = $query->getResult(); 

      if ($formsearch->get('reset')->isClicked()){ 
       return $this->redirectToRoute('homepage'); 
      } 

     } 
     else{ 
      $vae = 'no form submission'; 
      dump($vae); 
     } 
     //gets the table entries 
     $list = $this->getDoctrine() 
       ->getRepository('AppBundle:Users') 
       ->findAll(); 
     // Returns to index.html.twig with the variable liste, in which the db entries are 
     return $this->render('main/index.html.twig', array('list'=>$list, 'form'=>$formsearch->createView(), 'userssrc'=>$userssrc)); 
     //return $this->render('base.html.twig', array('session'=>$session)); 
    }} 

et voici le fichier index.html.twig:

{% extends 'base.html.twig' %} 

{% block title %}Personeneinträge{% endblock %} 
{% block body %} 
<div class='container'> 
<h1>Personeneinträge</h1> 
<form class='form-inline' method="post"> 
{{ form_start(form)}} 
{{ form_widget(form)}} 
{{ form_end(form)}} 
</form> 
<table class="table table-hover"> 
    <thead> 
    <th>Vorname</th> 
    <th>Nachname</th> 
    <th>Strasse</th> 
    <th>Ort</th> 
    <th>PLZ</th> 
     <th>Beschreibung</th> 
     <th class='col-md-3'>Bild</th> 
     <th>&nbsp;</th> 
    </thead> 
    <tbody> 
    {% if userssrc is null %} 
     {% for row in list %} 
    <tr> 
      <td>{{row.vorname}}</td> 
      <td>{{row.nachname}}</td> 
      <td>{{row.strasse}}</td> 
      <td>{{row.ort}}</td> 
      <td>{{row.plz}}</td> 
      <td>{{row.beschreibung}}</td> 
      {% if row.bild %} 
      <td><img class='usrimg' src="{{asset(row.bild, 'uploaded_files')}}" alt="Bild zum Benutzer"></td> 
      {% else %} 
      <td>-</td> 
      {% endif %} 
      <td> 
       <a href="{{ path('details',{'id':row.id})}}" class="btn btn-success">Details</a> 
       <a href="{{ path('edit',{'id':row.id})}}" class="btn btn-info">Bearbeiten</a> 
       <a href="{{ path('delete',{'id':row.id})}}" class="btn btn-danger">Löschen</a> 
       <a href="{{ path('mail',{'id':row.id})}}" class="btn btn-default">Als Mail senden</a> 
      </td> 
     </tr> 
     {% endfor %} 
    {% else %} 
     {% for row in userssrc %} 
     <tr> 
      <td>{{row.vorname}}</td> 
      <td>{{row.nachname}}</td> 
      <td>{{row.strasse}}</td> 
      <td>{{row.ort}}</td> 
      <td>{{row.plz}}</td> 
      <td>{{row.beschreibung}}</td> 
      <td> 
       <a href="{{ path('details',{'id':row.id})}}" class="btn btn-success">Details</a> 
       <a href="{{ path('edit',{'id':row.id})}}" class="btn btn-info">Bearbeiten</a> 
       <a href="{{ path('delete',{'id':row.id})}}" class="btn btn-danger">Löschen</a>   
      </td> 
     </tr> 
     {% endfor %} 
    {% endif %} 
    </tbody> 
</table> 
</div> 
{% endblock %} 

Je veux maintenant demander une confirmation avant de supprimer l'entrée, personne ne sait une solution simple ? Juste au cas où il aide à comprendre, voici une capture d'écran de la vue rendue: enter image description here

Je suis désolé, oublié d'ajouter mon supprimerAction:

/** 
    * @Route("/loeschen/{id}", name="delete") 
    */ 
    public function deleteAction($id){ 
     //start Doctrine 
      $em=$this->getDoctrine()->getManager(); 
      $list = $em->getRepository('AppBundle:Users')->find($id); 
      return $this->redirectToRoute('homepage', array('remove')); 
      $em->remove($list); 
      $em->flush(); 

    } 
+0

Vous pouvez utiliser un [modal] (https://getbootstrap.com/docs/3.3/javascript/#modals) avec javascript –

Répondre

2

Tout ce que vous aimez. Quelques méthodes communes

  • Créer une page intermédiaire avec juste un bouton lors de la suppression de confirmation (Etes-vous sûr?). Certains générateurs de symfony utilisent ce type de chose 'DeleteForm'. Où il lie à une nouvelle page avec l'ID en utilisant l'itinéraire, et sur le POST il supprime réellement. Vous pouvez ajouter un unmappedcheckbox qui ne tenterait pas de le sauvegarder sur l'objet. Vérifiez simplement s'il est vérifié dans le contrôleur. (bien que cela ne corresponde pas vraiment à la disposition de votre liste)

  • Et il y a javascript;

    • simples confirm
    • Fantaisie dialog/modal/popup bidules.
    • Plusieurs boutons d'état (le fait d'appuyer une fois le modifie pour informer l'utilisateur est sûr, puis le fait de le faire ou quoi que ce soit).

et je suis sûr qu'il ya d'autres options.

+0

ce sont de bons moyens de le faire grâce, mais n'a personne un exemple ou quelque chose comme ça ? Avoir des problèmes pour intégrer js dans mon projet et le laisser retourner un var ^^ " – origins523