Урок 04

Контроллеры

Что такое контроллер

Контроллер — это класс, который содержит методы обработки запросов. Вместо того чтобы писать логику в замыканиях роутов, её выносят в контроллеры. Это делает код структурированным и переиспользуемым.

Создание

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