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.
Ein generischer Controller hilft:
Lassen Sie uns Schritt für Schritt in die Umsetzung eintauchen!
Erstellen Sie zunächst einen neuen Controller:
php artisan make:controller GenericController
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.']); } }
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'); });
Stellen Sie sicher, dass jedes Modell über Folgendes verfügt:
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']; }
Das ist ideal für:
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!