Recherche…


Introduction

Au lieu de définir toute la logique de gestion des demandes en tant que fermetures dans les fichiers de routage, vous pouvez organiser ce comportement à l'aide de classes de contrôleur. Les contrôleurs peuvent regrouper la logique de traitement des demandes associée en une seule classe. Les contrôleurs sont stockés dans le répertoire app/Http/Controllers par défaut.

Contrôleurs de base

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

Vous pouvez définir une route vers cette action de contrôleur comme suit:

Route::get('user/{id}', 'UserController@show');

Désormais, lorsqu'une demande correspond à l'URI de la route spécifiée, la méthode show de la classe UserController sera exécutée. Bien entendu, les paramètres de l'itinéraire seront également transmis à la méthode.

Contrôleur Middleware

Le middleware peut être assigné aux routes du contrôleur dans vos fichiers de route:

Route::get('profile', 'UserController@show')->middleware('auth');

Cependant, il est plus pratique de spécifier le middleware dans le constructeur de votre contrôleur. En utilisant la méthode middleware du constructeur de votre contrôleur, vous pouvez facilement attribuer un middleware à l'action du contrôleur.

class UserController extends Controller
{
    /**
     * Instantiate a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');

        $this->middleware('log')->only('index');

        $this->middleware('subscribed')->except('store');
    }
}

Contrôleur de ressources

Le routage des ressources Laravel attribue les routes "CRUD" typiques à un contrôleur avec une seule ligne de code. Par exemple, vous souhaiterez peut-être créer un contrôleur qui gère toutes les requêtes HTTP pour les "photos" stockées par votre application. En utilisant la commande make:controller Artisan, nous pouvons rapidement créer un tel contrôleur:

php artisan make:controller PhotoController --resource

Cette commande va générer un contrôleur sur app/Http/Controllers/PhotoController.php . Le contrôleur contiendra une méthode pour chacune des opérations de ressources disponibles.

Exemple de l'apparence d'un contrôleur de ressources

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PhotoController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

L'exemple du contrôleur de ressources partage le nom de la méthode de ceux du tableau ci-dessous.

Ensuite, vous pouvez enregistrer un itinéraire ingénieux vers le contrôleur:

Route::resource('photos', 'PhotoController');

Cette déclaration de routage unique crée plusieurs itinéraires pour gérer diverses actions sur la ressource. Le contrôleur généré aura déjà des méthodes écrasées pour chacune de ces actions, y compris des notes vous informant des verbes HTTP et des URI qu'ils traitent.

Actions gérées par le contrôleur de ressources

Verbe URI action Nom de l'itinéraire
OBTENIR /photos indice photos.index
OBTENIR /photos/create créer photos.créer
POSTER /photos le magasin photos.store
OBTENIR /photos/{photo} montrer photos.show
OBTENIR /photos/{photo}/edit modifier photos.edit
PUT / PATCH /photos/{photo} mettre à jour photos.update
EFFACER /photos/{photo} détruire photos.destroy


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow