Bonjour,
Voila je travaille avec symfony 5 et je rencontre un petit problème avec mon code. j'ai une table des fournisseurs avec un champ "Etat" de type "choix multiples". j'arrive à importer la liste de tous les fournisseurs. je veux que je puisse modifier l'état d'un founisseur quelconque "désactivé" par exemple, directement sur la liste sans passer par l'action "editer" et enfin enregistrer les modifications effectués sur la liste. Pouvez vous m'aider à me donner quelques pistes ou liens de faire ça? je ne veux pas une solution à base de jquery AJAX.

3 réponses


salut,

Soit tu passes par un bouton avec un champs de formulaire ... Soit un lien relié à une action dans ton controller.
Dans les 2 cas tu auras un rafraichissement de page.
Le plus propre reste une solution en AJAX

boum
Auteur

Bonjour, tu peux me rediriger avec une action dans le controleur vers une solution , je suis debutant en symfony

Dans l'absolue, chaque action dans un controller peut-être lié à un chemin auquel du ajouter un parametre (notament l'id du fournisseur dans ton cas)

Du coup, lorsque tu clique sur un lien avec le parametre dans l'url du aura l'action.
Dans le cas d'nu CRUD

tu as bien un lien pour l'ajout, un pour l'edit, un pour lire et unn un pour le delete

Là c'est pareil au final l'action est bien un udpate prenant un parametre d'entré (id fournisseur) et mettant a jour uniquement le parametre activ/inactive.

Un exemple en SF3 + Ajax, mais bon la logique reste la même

Dans le controller tu recherches le fournisseur via l'id passé en paramètre
Puis, en fonction de son status (actif/inactif) tu inversses celui-ci, si il etait actif il devient inactif et inverssement.
et que tu passe par un lien direct ou par de l'ajax cela revient à attaquer le path de l'action dans le controller

(pas sur d'être extrement clair vue l'heure lol )

  /**
 *
 * @Route("/loading", name="detailvoyage_loading_package")
 */
    public function updateLoadingPackageAction(Request $request)
    {

        if ($request->isMethod('POST') && $request->isXmlHttpRequest())
        {
            /* @var $voyage DetailVoyage  */
            $content = $request->request;
            $em = $this->getDoctrine()->getManager();
            $voyage = $em->getRepository('AppBundle:DetailVoyage')->find($content->get('id'));
            $voyage->setChargement($content->get('status') === True ? 1 : 0);
            $em->persist($voyage);
            $em->flush();

            return new JsonResponse(array(
                        'status' => $content->get('status'),
                        'key' => $content->get('id')
            ));
        }
        return false;
    }

    /**