> 백엔드 개발 > PHP 튜토리얼 > 여러 리소스를 위해 Laravel에서 일반 CRUD 컨트롤러를 구축하는 방법

여러 리소스를 위해 Laravel에서 일반 CRUD 컨트롤러를 구축하는 방법

Linda Hamilton
풀어 주다: 2025-01-06 16:11:41
원래의
815명이 탐색했습니다.

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

여러 리소스를 위해 Laravel에서 일반 CRUD 컨트롤러를 구축하는 방법

Laravel 애플리케이션에서 여러 CRUD 작업을 관리하는 것은 부담스러울 수 있으며, 특히 점점 더 많은 모델을 처리할 때 더욱 그렇습니다. 이번 게시물에서는 단일 컨트롤러에서 기존 및 향후 CRUD 작업을 처리할 수 있는 일반 CRUD 컨트롤러를 만드는 방법을 안내하겠습니다.

일반 컨트롤러를 사용하는 이유는 무엇입니까?

일반 컨트롤러의 도움:

  • 반복되는 코드를 최소화하세요.
  • 새로운 모델을 쉽게 추가하세요.
  • 애플리케이션에 일관된 구조를 제공하세요.

구현을 단계별로 살펴보겠습니다!


1단계: 컨트롤러 설정

새 컨트롤러를 만드는 것부터 시작하세요.

php artisan make:controller GenericController
로그인 후 복사

2단계: 컨트롤러 로직 작성

모든 모델에 대한 CRUD 작업을 처리하도록 GenericController를 설계하는 방법은 다음과 같습니다.

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.']);
    }
}
로그인 후 복사

3단계: 동적 라우팅

동적 엔드포인트를 사용하도록 경로를 구성하세요.

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'); 
});
로그인 후 복사

4단계: 모델 준비

각 모델에 다음 사항이 있는지 확인하세요.

  • 대량 할당 가능한 필드를 지정하는 $fillable 속성

게시물 모델의 예:

namespace App\Models;

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

class Post extends Model
{
    use HasFactory;

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

로그인 후 복사

주요 장점

  • 확장성: 모델 파일만 추가하여 새로운 모델을 쉽게 처리할 수 있습니다.
  • 코드 재사용성: 중복성을 줄입니다.
  • 유지관리 단순화: 상용구 코드에 대한 걱정 없이 비즈니스 로직에 집중하세요.

이 접근 방식을 언제 사용해야 합니까?

다음의 경우에 이상적입니다.

  • 표준 CRUD 로직을 사용하는 애플리케이션
  • 모델들이 공통적인 행동을 공유하는 프로젝트

더 복잡한 비즈니스 로직의 경우 전용 컨트롤러가 필요할 수도 있습니다.

위 내용은 여러 리소스를 위해 Laravel에서 일반 CRUD 컨트롤러를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿