Formation PUB030 : Laravel, 2019 Le formulaire d'ajout

28.5 Formulaire d'ajout avec liste déroulante


Plusieurs situations demandent à ce qu'un formulaire Web présente des options sous la forme d'une liste déroulante. C'est le cas, notamment, lorsqu'on doit ajouter un enregistrement dans une table qui contient une clé étrangère.

Pour saisir la valeur de la clé étrangère, on utilisera une liste déroulante dont les valeurs sont tirées de la table qui contient la clé primaire.

Voici comment monter un tel formulaire avec Laravel.

Retrouver les données dans le contrôleur

Pour retrouver les informations de la liste déroulante, il faut faire une requête Eloquent dans la table qui contient la clé primaire.

Ex :

Contrôleur Laravel (PHP)

$categories = Categorie::all();

Cette instruction donnera le résultat suivant :

Résultat de la requête

Collection {#188 ▼

  #items: array:3 [▼

    0 => Categorie {#189 ▼

      ...

      #attributes: array:4 [▼

        "id" => 1

        "description" => "Électroménagers"

        "created_at" => null

        "updated_at" => null

      ]

      ...

    }

    1 => Categorie {#190 ▼

      ...

      #attributes: array:4 [▼

        "id" => 2

        "description" => "Meubles"

        "created_at" => null

        "updated_at" => null

      ]

      ...

    }

    2 => Categorie {#191 ▼

      ...

      #attributes: array:4 [▼

        "id" => 3

        "description" => "Appareils électroniques"

        "created_at" => null

        "updated_at" => null

      ]

      ...

    }

  ]

}

L'exemple précédent comporte une erreur importante au niveau de l'ergonomie : les champs apparaissent dans l'ordre où ils ont été ajoutés dans la base de donnée. Il serait beaucoup plus approprié de les faire apparaître en ordre alphabétique.

Ex :

Contrôleur Laravel (PHP)

$categories = Categorie::orderBy('description')->get();

Le champ listé dans le orderBy() doit être le même qui sera affiché dans la liste déroulante.

Maintenant qu'on a en main les données de la liste déroulante, on peut passer ces informations à la vue :

Contrôleur Laravel (PHP)

/**

 * Affiche le formulaire pour ajouter un produit.

 *

 * @return IlluminateViewView

 */

public function create() : View

{

    $categories = Categorie::orderBy('description')->get();

    return view('produits.create', compact('categories'));

}

Remplir une liste déroulante à partir de la base de données

Pour remplir une liste déroulante directement en HTML, votre vue devra effectuer une boucle.

Ex :

Vue Laravel (Blade)

<select class="form-control" id="categorie_id" name="categorie_id">

    @foreach($categories as $categorie)

        <option value="{{ $categorie->id }}" >{{ $categorie->description }}</option>

    @endforeach

</select>

Ajouter un élément en haut de la liste déroulante

Il est possible d'ajouter un élément en haut de la liste pour inviter l'usager à faire une sélection :

Vue Laravel (Blade)

<select class="form-control" id="categorie_id" name="categorie_id">

    <option value="" selected>Veuillez choisir...</option>

    @foreach($categories as $categorie)

        <option value="{{ $categorie->id }}">{{ $categorie->description }}</option>

    @endforeach

</select>

Liste déroulante à partir d'une collection générée par un pluck()

Dans certaines situations, vous pourriez avoir en main une collection générée en utilisant un pluck(). Vous n'aurez donc pas une collection de modèles mais bien un tableau associatif. Dans ce cas, vous devrez plutôt utiliser cette structure de code :

Vue Laravel (Blade)

{{-- ici, $categories est un tableau associatif et non une collection de modèles --}}

<select class="form-control" id="categorie_id" name="categorie_id">

    @foreach($categories as $id => $description)

        <option value="{{ $id }}" >{{ $description }}</option>

    @endforeach

</select>

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre