Контроллеры
Пока маршрутов мало, код можно писать прямо в routes/web.php. Но с ростом проекта файл разрастается. Контроллер — это класс, в котором собраны обработчики запросов для одной части сайта, например для статей.
Создание контроллера
Контроллер создаётся командой Artisan:
php artisan make:controller PostControllerФайл появится в app/Http/Controllers/PostController.php.
Метод контроллера
Каждый метод обрабатывает один запрос и возвращает ответ:
namespace App\Http\Controllers;
class PostController extends Controller
{
public function index()
{
return 'Список статей';
}
}Привязка к маршруту
В маршруте указывают класс и имя метода:
use App\Http\Controllers\PostController;
Route::get('/posts', [PostController::class, 'index']);Параметры маршрута
Параметр из адреса приходит в аргумент метода:
public function show(string $id)
{
return "Статья $id";
}Route::get('/posts/{id}', [PostController::class, 'show']);Данные запроса
Чтобы прочитать данные формы или строки запроса, в аргументы добавляют объект Request — Laravel подставит его сам:
use Illuminate\Http\Request;
public function search(Request $request)
{
$query = $request->input('q', '');
return "Ищем: $query";
}Второй аргумент input() — значение по умолчанию, если параметра нет.
Ресурсный контроллер
Для типового набора действий — список, просмотр, создание, изменение, удаление — есть готовая заготовка:
php artisan make:controller PostController --resourceВсе семь маршрутов подключаются одной строкой:
Route::resource('posts', PostController::class);| Метод и адрес | Метод контроллера |
|---|---|
GET /posts | index |
GET /posts/create | create |
POST /posts | store |
GET /posts/{post} | show |
GET /posts/{post}/edit | edit |
PUT /posts/{post} | update |
DELETE /posts/{post} | destroy |
Частая ошибка
Если забыть строку use с контроллером в файле маршрутов, Laravel не найдёт класс и выдаст ошибку Target class [PostController] does not exist. Проверьте, что вверху routes/web.php есть use App\Http\Controllers\PostController;.