Контроллер

Реализация CRUD – самый быстрый способ познакомиться с любым веб-фреймворком. Он затрагивает все основные его части и позволяет понять насколько в этом фреймворке удобно работать.

Создать CRUD в Laravel можно несколькими способами. Самый простой – добавить в файл маршрутизации нужные маршруты вместе с обработчиками. Внутри обработчиков реализовать логику вывода списка, создания, обновления и удаления статьи. Этот способ очень муторный, он требует много движений от программиста. И он быстро захламляет файл с маршрутами. Когда таких "крудов" станет хотя бы несколько штук, то ориентироваться в нем станет проблематично. А если добавить сотню другую как в реальных проектах, так вообще станет невозможно.

Проблема одного файла решается с помощью "контроллера". В Laravel контроллером называют класс, который расположен в директории app/HTTP/Controllers. Методы этого класса связываются с конкретными маршрутами и отвечают за его обработку:

<?php
// routes/web.php

// Вторым параметром передаётся строчка: '[email protected]'
Route::get('/about', '[email protected]');
Route::get('/team', '[email protected]');


// app/HTTP/Controllers/PageController.php

namespace App\Http\Controllers;

// Должен наследоваться от Controller
class PageController extends Controller
{
    public function about()
    {
        // Точка используется вместо /.
        // То есть шаблон находится по пути resources/views/page/about.blade.php
        return view('page.about');
    }

    public function team()
    {
        return view('page.team');
    }
}

Методы в контроллерах принято группировать по смысловой связи. Например, всё, что относится к обычным страницам на сайте можно поместить в контроллер PageController, а CRUD для статей — в контроллер ArticleController. Ниже пример структуры контроллеров из нашего открытого проекта hexlet-sicp:

app/Http/Controllers/
├── Auth
│   ├── ForgotPasswordController.php
│   ├── LoginController.php
│   ├── RegisterController.php
│   ├── ResetPasswordController.php
│   ├── Social
│   │   └── GithubController.php
│   └── VerificationController.php
├── Controller.php
├── HomeController.php
├── MyController.php
├── RatingController.php
├── UserChapterController.php
└── UserController.php

Ещё одно соглашение — расположение шаблонов. Шаблоны одного контроллера лучше группировать вместе, в одной директории. В примере выше, все шаблоны страниц расположены по пути resources/views/page. Это позволяет удобнее ориентироваться в шаблонах и избегать коллизий имён.

Контроллеры, также как и модели не нужно создавать руками. Их можно генерировать через artisan:

$ php artisan make:controller PageController
Controller created successfully.

А вот шаблоны и методы контроллера придётся добавлять самостоятельно.

Самостоятельная работа

  1. Перенесите обработчик about в контроллер PageController. Убедитесь, что страница открывается.

Дополнительные материалы

  1. Controller
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →