Контроллеры
Что такое контроллер
Контроллер — это класс, который содержит методы обработки запросов. Вместо того чтобы писать логику в замыканиях роутов, её выносят в контроллеры. Это делает код структурированным и переиспользуемым.
Создание
php artisan make:controller PostController
Создаётся файл app/Http/Controllers/PostController.php.
Пример контроллера
namespace App\Http\Controllers;
class PostController extends Controller
{
public function index()
{
return 'Список постов';
}
public function show(string $id)
{
return "Пост #{$id}";
}
}
Каждый публичный метод — это действие, которое можно привязать к роуту.
Привязка к роутам
use App\Http\Controllers\PostController;
Route::get('/posts', [PostController::class, 'index']);
Route::get('/posts/{id}', [PostController::class, 'show']);
Resource-контроллеры
Для CRUD-операций Laravel может сгенерировать контроллер с семью стандартными методами:
php artisan make:controller PostController --resource
Методы:
index— списокcreate— форма созданияstore— сохранениеshow— просмотр одногоedit— форма редактированияupdate— обновлениеdestroy— удаление
Подключение одной строкой:
Route::resource('posts', PostController::class);
Laravel автоматически создаст 7 маршрутов с правильными HTTP-методами.
API Resource
Для API создаётся вариант без create и edit — потому что в API нет HTML-форм:
php artisan make:controller Api/PostController --api
Route::apiResource('posts', PostController::class);
Внедрение зависимостей
Laravel автоматически разрешает зависимости, указанные в аргументах метода:
public function show(PostService $service, string $id)
{
return $service->find($id);
}
Класс PostService будет создан и передан без ручной инициализации.
Типы ответов
return response()->json(['status' => 'ok']);
return response()->json($data, 201);
return response()->noContent();
return redirect()->route('posts.index');