Maison > développement back-end > tutoriel php > Comment créer un contrôleur CRUD générique dans Laravel pour plusieurs ressources

Comment créer un contrôleur CRUD générique dans Laravel pour plusieurs ressources

Linda Hamilton
Libérer: 2025-01-06 16:11:41
original
815 Les gens l'ont consulté

How to Build a Generic CRUD Controller in Laravel for Multiple Resources

Comment créer un contrôleur CRUD générique dans Laravel pour plusieurs ressources

Gérer plusieurs opérations CRUD dans une application Laravel peut s'avérer écrasant, en particulier lors de la gestion d'un nombre croissant de modèles. Dans cet article, je vais vous guider dans la création d'un contrôleur CRUD générique qui vous permet de gérer les opérations CRUD existantes et futures dans un seul contrôleur.

Pourquoi utiliser un contrôleur générique ?

Un contrôleur générique aide :

  • Réduire le code répétitif.
  • Facilitez l'ajout de nouveaux modèles.
  • Fournissez une structure cohérente pour votre candidature.

Plongeons dans la mise en œuvre étape par étape !


Étape 1 : configuration du contrôleur

Commencez par créer un nouveau contrôleur :

php artisan make:controller GenericController
Copier après la connexion

Étape 2 : écriture de la logique du contrôleur

Voici comment concevoir votre GenericController pour gérer les opérations CRUD pour n'importe quel modèle :

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Str;

class GenericController extends Controller
{
    protected function getModel($modelName)
    {
        $modelClass = 'App\Models\' . Str::studly($modelName);

        if (!class_exists($modelClass)) {
            abort(404, "Model $modelName not found.");
        }

        return new $modelClass;
    }

    public function index($model)
    {
        $modelInstance = $this->getModel($model);
        return response()->json($modelInstance::all());
    }

    public function show($model, $id)
    {
        $modelInstance = $this->getModel($model);
        return response()->json($modelInstance::findOrFail($id));
    }

    public function store(Request $request, $model)
    {
        $modelInstance = $this->getModel($model);
        $data = $request->validate($modelInstance->getFillable());
        $created = $modelInstance::create($data);

        return response()->json($created, 201);
    }

    public function update(Request $request, $model, $id)
    {
        $modelInstance = $this->getModel($model);
        $item = $modelInstance::findOrFail($id);
        $data = $request->validate($modelInstance->getFillable());
        $item->update($data);

        return response()->json($item);
    }

    public function destroy($model, $id)
    {
        $modelInstance = $this->getModel($model);
        $item = $modelInstance::findOrFail($id);
        $item->delete();

        return response()->json(['message' => 'Deleted successfully.']);
    }
}
Copier après la connexion

Étape 3 : routage dynamique

Configurez vos itinéraires pour utiliser des points de terminaison dynamiques :

use App\Http\Controllers\GenericController;

Route::controller(GenericController::class)->prefix('api/{model}')->group(function () {
    Route::get('/', 'index'); 
    Route::get('/{id}', 'show'); 
    Route::post('/', 'store'); 
    Route::put('/{id}', 'update'); 
    Route::delete('/{id}', 'destroy'); 
});
Copier après la connexion

Étape 4 : Préparez vos modèles

Assurez-vous que chaque modèle possède :

  • Une propriété $fillable pour spécifier des champs assignables en masse.

Exemple pour un modèle Post :

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'content'];
}

Copier après la connexion

Avantages clés

  • Évolutivité : Gérez facilement de nouveaux modèles en ajoutant uniquement le fichier modèle.
  • Réutilisabilité du code : réduit la redondance.
  • Simplifie la maintenance : concentrez-vous sur la logique métier sans vous soucier du code passe-partout.

Quand utiliser cette approche ?

C'est idéal pour :

  • Applications avec logique CRUD standard.
  • Projets où les modèles partagent un comportement commun.

Pour une logique métier plus complexe, vous aurez peut-être encore besoin de contrôleurs dédiés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal