Cours sur les Contrôleurs de Ressources dans Laravel
Introduction
Les contrôleurs de ressources dans Laravel simplifient la création de contrôleurs en fournissant une structure prédéfinie pour les opérations CRUD (Create, Read, Update, Delete). Ils sont particulièrement utiles pour gérer les ressources RESTful.
Création d'un Contrôleur de Ressources
Pour créer un contrôleur de ressources, vous pouvez utiliser la commande artisan suivante :
php artisan make:controller MonResourceController --resource
Cela créera un nouveau fichier de contrôleur dans le répertoire app/Http/Controllers avec les méthodes prédéfinies pour les opérations CRUD.
Structure d'un Contrôleur de Ressources
Un contrôleur de ressources typique contient les méthodes suivantes :
namespace App\Http\Controllers;
use App\Models\MonModel;
use Illuminate\Http\Request;
class MonResourceController extends Controller
{
public function index()
{
// Afficher la liste des ressources
}
public function create()
{
// Afficher le formulaire de création d'une nouvelle ressource
}
public function store(Request $request)
{
// Stocker une nouvelle ressource
}
public function show($id)
{
// Afficher une ressource spécifique
}
public function edit($id)
{
// Afficher le formulaire d'édition d'une ressource spécifique
}
public function update(Request $request, $id)
{
// Mettre à jour une ressource spécifique
}
public function destroy($id)
{
// Supprimer une ressource spécifique
}
}
Définition des Routes de Ressources
Vous pouvez définir des routes de ressources dans le fichier de définition des routes (routes/web.php ou routes/api.php) :
Route::resource('monresource', MonResourceController::class);
Cette ligne de code générera automatiquement toutes les routes nécessaires pour les opérations CRUD.
Exemples de Scénarios
1. Gestion des Articles de Blog
Voici un exemple de contrôleur de ressources pour gérer les articles de blog :
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::all();
return view('articles.index', compact('articles'));
}
public function create()
{
return view('articles.create');
}
public function store(Request $request)
{
$data = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
]);
Article::create($data);
return redirect()->route('articles.index');
}
public function show($id)
{
$article = Article::find($id);
return view('articles.show', compact('article'));
}
public function edit($id)
{
$article = Article::find($id);
return view('articles.edit', compact('article'));
}
public function update(Request $request, $id)
{
$data = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
]);
Article::where('id', $id)->update($data);
return redirect()->route('articles.index');
}
public function destroy($id)
{
Article::destroy($id);
return redirect()->route('articles.index');
}
}
Les routes correspondantes sont générées avec :
Route::resource('articles', ArticleController::class);
2. Gestion des Utilisateurs
Voici un exemple de contrôleur de ressources pour gérer les utilisateurs :
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
$users = User::all();
return view('users.index', compact('users'));
}
public function create()
{
return view('users.create');
}
public function store(Request $request)
{
$data = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|string|min:8',
]);
$data['password'] = bcrypt($data['password']);
User::create($data);
return redirect()->route('users.index');
}
public function show($id)
{
$user = User::find($id);
return view('users.show', compact('user'));
}
public function edit($id)
{
$user = User::find($id);
return view('users.edit', compact('user'));
}
public function update(Request $request, $id)
{
$data = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email,' . $id,
]);
if ($request->filled('password')) {
$data['password'] = bcrypt($request->password);
}
User::where('id', $id)->update($data);
return redirect()->route('users.index');
}
public function destroy($id)
{
User::destroy($id);
return redirect()->route('users.index');
}
}
Les routes correspondantes sont générées avec :
Route::resource('users', UserController::class);
Conclusion
Les contrôleurs de ressources dans Laravel offrent une manière efficace et structurée de gérer les opérations CRUD pour vos ressources. En utilisant les contrôleurs de ressources, vous pouvez facilement maintenir et étendre la logique de votre application tout en gardant un code propre et organisé.