Resource-контроллеры
Resource-контроллер — это контроллер, который реализует стандартный CRUD по соглашениям Laravel. Одна строка в роутах создаёт 7 маршрутов.
Создание
php artisan make:controller PostController --resource
Создаётся класс с 7 методами:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index() {}
public function create() {}
public function store(Request $request) {}
public function show(string $id) {}
public function edit(string $id) {}
public function update(Request $request, string $id) {}
public function destroy(string $id) {}
}
Регистрация
Route::resource('posts', PostController::class);
Laravel создаёт маршруты:
| Метод | URL | Действие | Имя |
|---|---|---|---|
| GET | /posts | index | posts.index |
| GET | /posts/create | create | posts.create |
| POST | /posts | store | posts.store |
| GET | /posts/{post} | show | posts.show |
| GET | /posts/{post}/edit | edit | posts.edit |
| PUT/PATCH | /posts/{post} | update | posts.update |
| DELETE | /posts/{post} | destroy | posts.destroy |
Ограничение методов
Только чтение:
Route::resource('posts', PostController::class)->only(['index', 'show']);
Всё, кроме удаления:
Route::resource('posts', PostController::class)->except(['destroy']);
API Resource
Для API не нужны create и edit — это формы. Используется apiResource:
php artisan make:controller Api/PostController --api
Route::apiResource('posts', PostController::class);
Создаёт 5 маршрутов: index, store, show, update, destroy.
Вложенные ресурсы
Route::resource('posts.comments', CommentController::class);
URL: /posts/{post}/comments/{comment}. Методы контроллера получат оба параметра.
Мягкое удаление
Если модель использует SoftDeletes:
Route::resource('posts', PostController::class)->withTrashed(['show']);
Именование параметров
По умолчанию параметр — {post}. Если модель называется иначе:
Route::resource('articles', PostController::class)
->parameters(['articles' => 'post']);