Bonjour,

Quelqu'un pourrait il m'expliquer comment, lorsque j'utilise "Route::resource()" dans les routes, la fonction "show()" de mon controller filtre automatiment le resultat en fonction de l'url "/public/index.php/equipment/2" ?

*Extrait de mon controlleur:*****

/**
     * Display the specified resource.
     *
     * @param  \App\Equipment  $equipment
     * @return \Illuminate\Http\Response
     */
    public function show(Equipment $equipment)
    {

        return $equipment ;
    }

Merci.

6 réponses


Bonjour,

Je n'ai pas trop compris la question, pourrais-tu la reformuler ?

Half
Auteur

Bonjour,

En fait j'utilise la commande suivante:

artisan make:controller EquipmentController --resource --model=Equipment

Celle ci me crée un controlleur avec les différentes methodes "CRUD" ainsi que le modèl.
Je complète la méthode index de mon controller, pour qu'elle me retourne tout les équipements.

public function index()
    {
        $data = Equipment::all();
        return $data;
    }

Je complète ensuite la méthode show pour que mon controller me retourne un équipment en particulier

public function show(Equipment $equipment)
    {

        return $equipment ;
    }

Une foie mon controller créé , je definis ma route comme ci dessous.

Route::resource('Equipment', 'EquipmentController');

Ma question concerne la méthode show():
Lorsque j'utilise cette URL, "public/index.php/equipment/2", la méthode me retourne l'équipment n°2, ce qui est normale
mais je ne comprend pas tout le mécanisme car je n'ai fais que retourner le paramètre d'entrée de la méthode.

Merci.

Salut,

L'équipement qui est passé en paramètre est celui avec l'id qui était dans l'URL, il a été récupéré en bdd par Laravel.

Alors,
En faite ça utilise une nouvelle fonctionnalité de laravel qui s'appelle l'"implicit binding", comme tu dis que le type de $equipment (en paramètre) c'est le modèle Equipment, il connait la table ainsi que la colonne utilisée via les méthodes appropriées (respectivement la variable $table de ton modèle (qui est mise automatiquement) et la fonction que tu as dans la doc). Avec cette table et cette colonne, il retrouve le bon equipment et le retourne. Il retourne une 404 si l'equipment n'existe pas.

Half
Auteur

Merci.

C'est pratique mais bluffant au début.

Salut,
Cette ligne de code:

Route::resource('Equipment', 'EquipmentController');

va creer tout les routes nécessaires pour l'Equipement pour comprendre de quoi s'agit-il, essayer de créer les route manuallement.
Pour voir les route fournit par cette methode vous pouvez utilser cette command:

php artisan route:list

vous allez avoir tout les route disponible sur votre application.