Rumah >pembangunan bahagian belakang >tutorial php >Cara Membina Pengawal CRUD Generik dalam Laravel untuk Pelbagai Sumber

Cara Membina Pengawal CRUD Generik dalam Laravel untuk Pelbagai Sumber

Linda Hamilton
Linda Hamiltonasal
2025-01-06 16:11:41830semak imbas

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

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.

Mengapa Menggunakan Pengawal Generik?

Pengawal generik membantu:

  • Minimumkan kod berulang.
  • Jadikan penambahan model baharu menjadi mudah.
  • Sediakan struktur yang konsisten untuk aplikasi anda.

Mari kita mendalami pelaksanaan langkah demi langkah!


Langkah 1: Menyediakan Pengawal

Mulakan dengan mencipta pengawal baharu:

php artisan make:controller GenericController

Langkah 2: Menulis Logik Pengawal

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.']);
    }
}

Langkah 3: Penghalaan Dinamik

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'); 
});

Langkah 4: Sediakan Model Anda

Pastikan setiap model mempunyai:

  • Sifat $fillable untuk menentukan medan yang boleh diagihkan secara besar-besaran.

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'];
}

Kelebihan Utama

  • Skalabiliti: Mengendalikan model baharu dengan mudah dengan menambahkan fail model sahaja.
  • Kebolehgunaan Kod: Mengurangkan lebihan.
  • Memudahkan Penyelenggaraan: Fokus pada logik perniagaan tanpa perlu risau tentang kod boilerplate.

Bila Menggunakan Pendekatan Ini?

Ini sesuai untuk:

  • Aplikasi dengan logik CRUD standard.
  • Projek yang model berkongsi tingkah laku biasa.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn