Bonjour à tous,

Etant un petit nouveau dans le monde de Symfony, j'ai besoin de quelques petits conseils pour bien continuer mon apprentissage.

Je cherche à créer un petit site simple pour me former, sur la base d'un besoin que j'ai depuis un petit moment. Tout roule pour le moment, mais une question me taraude l'esprit.

Pourquoi toutes les techniques que j'apprends m'ammene toujours à recharger la page sur laquel je suis ? Je m'explique.

Je suis en train de travail sur un tableau contenant une liste d'éléments liés à une base de données. Je cherche à implémenter des fonctions de suppressions de lignes, et un bouton pour en ajouter.

La suppression marche très bien, mais je n'ai pas trouvé de technique pour le faire sans devoir recharger ma page entière par une redirection à la fin de mon code.

Voici comment j'implémente la solution pour le moment :

Dans mon twig :

    <th><a href="{{ path('delete_maxapps', {'id': element.id }) }}"><i class="fas fa-trash-alt"></i></a></th>

Mon Controller :

    /**
     * @param Maxapps $entity
     * @Route("/{id}/maxapps-remove", requirements={"id" = "\d+"}, name="delete_maxapps")
     */
    public function delete(Maxapps $entity): Response
    {
        $this->em->remove($entity);
        $this->em->flush();

        return $this->render(
            'pages/elements/maxapps.html.twig',
            [
                'current_menu' => 'maxapps',
                'elements' => $maxapps,
                'current_element' => 'Applications'
            ]
        );
    }

Je cherche un moyen pour que, lors du clique sur le bouton corbeille, la ligne soit supprimée de mon tableau sans rechargement de page. Je trouve l'expérience utilisateur beaucoup trop contraignante sinon.

J'ai plus ou moins le même soucis sur l'ajout, mais mon code étant moins avancé, j'en parlerai peut être plus tard !

Merci d'avance !

Edit : J'ai cru comprendre qu'il fallait que je passe par de l'ajax. Cela va m'obliger à réinsérer dans le dom les élements de ma liste suite à l'appel à la fonction, et je trouve qu'on perd toute la beauté de symfony avec cette méthode ... Une autre solution ?

1 réponse


Salut,
Effectivement, cela passe par de l'ajax... Et c'est normal. Symfony est basé sur php qui est un language qui tourne côté serveur.
Je te passe les détails, mais en gros ton serveur attend une requête et renvoie une réponse, le tout via le protocole http.
La réponse est alors interprétée par le navigateur qui charge la page.
Donc, si tu veux rafraichir une partie de la page seulement, un script doit tourner à partir de ton client (navigateur), donc du javascript, plus précisement en manipulant l'objet XMLHttpRequest (de l'ajax).
Tu ne perds rien de la "beauté de Symfony", tu vas juste appeler une route symfony depuis un script js.
En gros tu vas appeler ta route "delete_maxapps" en lui passant les paramètres, via une requête ajax (js), qui peut te renvoyer du json au lieu du html (plus simple pour transmettre une info de succès par exemple), ensuite le travail sur le DOM sera à réaliser en js.
Je te conseille les tutos de @Grafikart à ce sujet (section javascript).