Laravel 애플리케이션에서 여러 CRUD 작업을 관리하는 것은 부담스러울 수 있으며, 특히 점점 더 많은 모델을 처리할 때 더욱 그렇습니다. 이번 게시물에서는 단일 컨트롤러에서 기존 및 향후 CRUD 작업을 처리할 수 있는 일반 CRUD 컨트롤러를 만드는 방법을 안내하겠습니다.
일반 컨트롤러의 도움:
구현을 단계별로 살펴보겠습니다!
새 컨트롤러를 만드는 것부터 시작하세요.
php artisan make:controller GenericController
모든 모델에 대한 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.']); } }
동적 엔드포인트를 사용하도록 경로를 구성하세요.
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'); });
각 모델에 다음 사항이 있는지 확인하세요.
게시물 모델의 예:
namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Post extends Model { use HasFactory; protected $fillable = ['title', 'content']; }
다음의 경우에 이상적입니다.
더 복잡한 비즈니스 로직의 경우 전용 컨트롤러가 필요할 수도 있습니다.
위 내용은 여러 리소스를 위해 Laravel에서 일반 CRUD 컨트롤러를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!