Heim > Backend-Entwicklung > PHP-Tutorial > So erstellen Sie einen generischen CRUD-Controller in Laravel für mehrere Ressourcen

So erstellen Sie einen generischen CRUD-Controller in Laravel für mehrere Ressourcen

Linda Hamilton
Freigeben: 2025-01-06 16:11:41
Original
815 Leute haben es durchsucht

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

So erstellen Sie einen generischen CRUD-Controller in Laravel für mehrere Ressourcen

Die Verwaltung mehrerer CRUD-Vorgänge in einer Laravel-Anwendung kann überwältigend sein, insbesondere wenn eine wachsende Anzahl von Modellen verwaltet wird. In diesem Beitrag leite ich Sie bei der Erstellung eines generischen CRUD-Controllers an, der es Ihnen ermöglicht, bestehende und zukünftige CRUD-Vorgänge in einem einzigen Controller abzuwickeln.

Warum einen generischen Controller verwenden?

Ein generischer Controller hilft:

  • Repetitiven Code minimieren.
  • Machen Sie das Hinzufügen neuer Modelle zum Kinderspiel.
  • Sorgen Sie für eine einheitliche Struktur Ihrer Bewerbung.

Lassen Sie uns Schritt für Schritt in die Umsetzung eintauchen!


Schritt 1: Einrichten des Controllers

Erstellen Sie zunächst einen neuen Controller:

php artisan make:controller GenericController
Nach dem Login kopieren

Schritt 2: Schreiben der Controller-Logik

So können Sie Ihren GenericController so gestalten, dass er CRUD-Operationen für jedes Modell verarbeitet:

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.']);
    }
}
Nach dem Login kopieren

Schritt 3: Dynamisches Routing

Konfigurieren Sie Ihre Routen für die Verwendung dynamischer Endpunkte:

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'); 
});
Nach dem Login kopieren

Schritt 4: Bereiten Sie Ihre Modelle vor

Stellen Sie sicher, dass jedes Modell über Folgendes verfügt:

  • Eine $fillable-Eigenschaft zum Angeben von massenzuweisbaren Feldern.

Beispiel für ein Post-Modell:

namespace App\Models;

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

class Post extends Model
{
    use HasFactory;

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

Nach dem Login kopieren

Hauptvorteile

  • Skalierbarkeit: Einfache Handhabung neuer Modelle durch Hinzufügen nur der Modelldatei.
  • Code-Wiederverwendbarkeit: Reduziert Redundanz.
  • Vereinfacht die Wartung: Konzentrieren Sie sich auf die Geschäftslogik, ohne sich Gedanken über Standardcode machen zu müssen.

Wann sollte dieser Ansatz verwendet werden?

Das ist ideal für:

  • Anwendungen mit Standard-CRUD-Logik.
  • Projekte, bei denen Models gemeinsames Verhalten zeigen.

Für eine komplexere Geschäftslogik benötigen Sie möglicherweise noch dedizierte Controller.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen generischen CRUD-Controller in Laravel für mehrere Ressourcen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage