Laravel 5

Plusieurs vues "create" et une seule methode "store"

  • Avatar de Guilux
    Membre depuis :
    06/09/2018
    Messages :
    5

    Bonjour,

    Je suis en train de créér une application. Dans cette application, j'ai une table "rapports" avec plusieurs champs.

    Je peux creer le rapport de 2 façons différentes (1 avec une partie des champs, l'autre avec tous les champs).

    Je me demandais quel était la meilleure façon de faire ???

    Pour le moment, on va dire que j'ai 2 routes "rapport/create1" et "rapport/create2" qui me donne 2 vues différentes (pas les memes champs dans chaque vue). Dans chacune de ces vues j'ai un champ hidden avec une valeur (1 ou 2).
    Lors du "submit", ces vues renvoient vers la methode "store" du controlleur.

    Dans store, j'ai un if...else pour savoir si il s'agit de la vue "create1"ou "create2" et je fais le traitement en consequence.

    Je me demandais si c'etait la bonne méthode en sachant ue si un petit comique change la valeur du champ "hidden", cela pourrait faire bugger l'enregistrement.

    Que me conseillez-vous d'utiliser comme methode pour faire ce genre de dévellopement ???

    Merci
    Guillaume

  • Avatar de jmatike
    Membre depuis :
    07/04/2019
    Messages :
    18

    Moi ce que je ferais,

    1. j'ai une route en get vers rapport/create
    2. pour arriver à cette route je sais quel formulaire je veux appeler, donc j'enverrai le parametre $facon qui peut avoir comme valeur 1 ou 2. La route dans une vue peut être <a href="{{ route('rapport/create', ['facon' => 2] }}"> lien vers le deucième type de creation</a>
    3. dans le controller je recupere le parametre avec $facon = $request->get('facon'); que j'envoi dans l'unique vue de création
    4. dans le formulaire de creation, j'ai le champ caché <input type="hidden" name="facon" value="{{ $facon }}">
    5. quand je soumet le formulaire je teste, si $request->get('facon') == 1 alors je ne sauvegarde que certains champs, sinon je sauvegarde tout
    6. bien sur dans la vue du formulaire, j'aurai mit des @if partout pour masquer les champs qui sont pas necessaires

    Voilà c'est ma facon, mais il ya sans doutes plus performant, et j'espère que quelqu'un postera

  • Avatar de jmatike
    Membre depuis :
    07/04/2019
    Messages :
    18

    Certains codes ont été supprimé

    2-

    <a href="{{ route('rapport/create', ['facon' => 2] }}"> lien vers le deucième type de creation</a>

    4-

    <input type="hidden" name="facon" value="{{ $facon }}">
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2472

    Bonjour,

    Ca serait plus simple d'envoyer sur deux méthodes distinctes dans le contrôleur. Comme ça pas besoin de champ caché et pas de risque de manipulation fantaisiste.

  • Avatar de Guilux
    Membre depuis :
    06/09/2018
    Messages :
    5

    Merci à vous d'avoir pris le temps de répondre , je vais partir sur 2 methodes distinctes ;-)

  • Avatar de jmatike
    Membre depuis :
    07/04/2019
    Messages :
    18

    Bonjour,
    sauf que deux méthodes suggèrent 2 vues parce que 2 formulaires, et donc deux maintenances si jamais il fallait changer quelque chose dans un champ.
    Mais bon après c'est bien sur aussi une solution

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2472

    Bonjour,

    Comme les deux formulaires sont pratiquement identiques le code peut être facilement mutualisé au niveau des vues.

Vous ne pouvez pas répondre à ce sujet.