Rumah >pembangunan bahagian belakang >tutorial php >Cara Membina Pengawal CRUD Generik dalam Laravel untuk Pelbagai Sumber
Menguruskan berbilang operasi CRUD dalam aplikasi Laravel boleh menjadi sukar, terutamanya apabila mengendalikan semakin banyak model. Dalam siaran ini, saya akan membimbing anda untuk mencipta pengawal CRUD generik yang membolehkan anda mengendalikan operasi CRUD sedia ada dan akan datang dalam satu pengawal.
Pengawal generik membantu:
Mari kita mendalami pelaksanaan langkah demi langkah!
Mulakan dengan mencipta pengawal baharu:
php artisan make:controller GenericController
Berikut ialah cara anda boleh mereka GenericController anda untuk mengendalikan operasi CRUD untuk mana-mana model:
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.']); } }
Konfigurasikan laluan anda untuk menggunakan titik akhir dinamik:
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'); });
Pastikan setiap model mempunyai:
Contoh untuk model 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']; }
Ini sesuai untuk:
Untuk logik perniagaan yang lebih kompleks, anda mungkin masih memerlukan pengawal khusus.
Atas ialah kandungan terperinci Cara Membina Pengawal CRUD Generik dalam Laravel untuk Pelbagai Sumber. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!