Formation PUB030 : Laravel, 2019 Lien entre le contrôleur et la vue

20.1 Passer de l'information du contrôleur vers la vue


Avec le patron de conception MVC, lorsqu'une vue doit afficher des données tirées de la base de données, c'est le contrôleur qui se chargera de retrouver les données et de les passer à la vue.

Prenons le cas d'une méthode d'action qui affiche une vue comme suit :

Contrôleur Laravel (PHP)

class ProduitsController extends Controller

{

    /**

     * Affiche tous les produits.

     *

     * @return \Illuminate\View\View

     */

    public function index() : View

    {

        ...

        return view('produits.index');

    }

    ...

}

Puisque c'est le travail du contrôleur d'interroger la base de données, il faut trouver une technique pour faire circuler les données entre le contrôleur et la vue.

Plusieurs techniques sont présentées ici. Elles sont toutes équivalentes. Je vous conseille cependant d'utiliser la fonction compact() pour sa simplicité.

Passer les données à la vue à l'aide d'un tableau

Le contrôleur doit passer à la vue le nom de la variable qui contient les données ainsi que les données.

On regroupera ces deux informations dans un tableau associatif.

Ex :

Contrôleur Laravel (PHP)

class ProduitsController extends Controller

{

    /**

     * Affiche tous les produits.

     *

     * @return \Illuminate\View\View

     */

    public function index() : View

    {

        $produits = Produit::orderBy('code')->get();

 

        return View('produits.index', ['produits' => $produits]);

    }

    ...

}

Passer les données à la vue à l'aide de with()

On obtiendra exactement le même résultat avec la syntaxe suivante :

Contrôleur Laravel (PHP)

class ProduitsController extends Controller

{

    /**

     * Affiche tous les produits.

     *

     * @return \Illuminate\View\View

     */

    public function index() : View

    {

        $produits = Produit::orderBy('code')->get();

 

        return View('produits.index')->with('produits', $produits);

    }

    ...

}

Passer les données à la vue à l'aide de compact()

Il est également possible d'utiliser la fonction PHP compact(). Il s'agit de la méthode privilégiée par de nombreux développeurs Laravel.

La fonction compact() crée automatiquement un tableau associatif dont la clé de chaque élément correspond à la chaîne reçue en paramètre et la valeur correspond à la valeur de la variable du même nom.

Contrôleur Laravel (PHP)

class ProduitsController extends Controller

{

    /**

     * Affiche tous les produits.

     *

     * @return \Illuminate\View\View

     */

    public function index() : View

    {

        $produits = Produit::orderBy('code')->get();

 

        return View('produits.index', compact('produits'));

    }

    ...

}

Ainsi, compact('produits') retourne un tableau associatif avec un seul élément puisqu'un seul paramètre a été reçu. La clé de ce paramètre est 'produits' et sa valeur correspond à la variable $produits.

La variable $produits contient la liste des produits. Il s'agit en fait d'une collection puisque la requête Eloquent a été terminée par get().

JSON

array:1 [▼

  "produits" => Collection {#351 ▼

    #items: array:4 [▼

      0 => Produit {#352 ▶}

      1 => Produit {#353 ▶}

      2 => Produit {#354 ▶}

      3 => Produit {#355 ▶}

      4 => Produit {#356 ▶}

    ]

  }

]

Attention : dans les paramètres de compact(), ne laissez pas le signe $ devant le nom d'une variable sinon, vous obtiendrez un tableau vide.

Passer plusieurs variables à une vue

Parfois, le contrôleur devra passer plusieurs informations à la vue. Il suffira, pour cela, de passer plusieurs variables à la fonction compact :

Contrôleur Laravel (PHP)

class ProduitsController extends Controller

{

    /**

     * Affiche tous les produits.

     *

     * @return \Illuminate\View\View

     */

    public function index() : View

    {

        $produits = Produit::orderBy('code')->get();

        $derniersAchats = ...

 

        return View('produits.index', compact('produits', 'derniersAchats'));

    }

    ...

}

Pour plus d'information

« Passing Multiple Variables Into a Laravel 5 View ». Easy Laravel Book. http://www.easylaravelbook.com/blog/2015/03/09/passing-multiple-variables-into-a-laravel-5-view/

▼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