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 |