На странице последовательное описание с примерами кода создания контроллеров, маршрутов и представлений для фреймворка Laravel.
В MVC (Model-View-Controller) модель, представление, контроллер комплексно и неразрывно связаны. Но особая роль отводится все же контроллеру: он связывает представление и модель, а может и вовсе обходится без них. Например, веб-страницы AJAX взаимодействия, веб-страницы логических операций, веб-страницы игр и другое.
Контроллер, посредством маршрутизатора, принимает запросы от пользователей и отправляет сформированные ответы обратно. Для этого он может задействовать модели таблиц базы данных, функциональность классов бизнес-логики и вспомогательные функции.
Внизу страницы прикреплен исходник примера сайта использования контроллеров в фреймворке Laravel. Исходник написан в MS Visual Studio Code – кроссплатформенном редакторе кода профессионального уровня. Перед тестированием исходного кода необходимо установить интерпретатор PHP и менеджер зависимостей Composer .
В Laravel, контроллер — это PHP класс, расширяющий базовый класс Controller. Базовый класс предоставляет вашему контроллеру middleware ( проверка и фильтрация HTTP-запросов), authorize (встроенные службы аутентификации) и возможно другие сервисы в зависимости от версии фреймворка.
Можно также без проблем создавать собственные контроллеры без наследования от базового класса, а дополнительные функции фреймворка подключать по мере необходимости. В прикрепленном исходнике пример такого контроллера - PageController.
По умолчанию контроллеры хранятся в каталоге app/Http/Controllers. Методы контроллера предназначены для ответа на входящие HTTP-запросы. Создание контроллера вручную подразумевает создание php-файла с названием класса контроллера и написание кода класса.
Контроллеры удобно создавать при помощи Artisan входящего в состав Laravel. Artisan – командный помощник веб-разработчика, работает в окне командной строки. Одна команда и создается контроллер со стартовым программным кодом. В Visual Studio Code команды Artisan выполняются терминале, который можно вызвать из меню View->Terminal или Terminal->New Terminal.
Новый контроллер создается командой: php artisan make:controller HomeController Home – название контроллера и для обозначения функциональности после названия стандартно принято добавлять постфикс Controller. В результате создается стартовый код класса с полным названием HomeController:
Методы контроллера, отвечающие на запросы клиентов, называются действиями (action) и они обязательно должны определяться как общедоступные (public). Методы контроллера, определенные как private не работают в маршрутах, но их можно использовать как вспомогательные функции внутри контроллера.
Добавим в класс HomeController action-метод с кодом для вывода текста на главную страницу:
<?phpnamespaceApp\Http\Controllers;classHomeControllerextendsController{// Action-метод для домашней страницыpublicfunctionindex(){// Переменная хранения текста$greeting="Здравствуй Мир! Я Laravel!";// Возврат представления и передача в него данных.returnview("home.index",["greeting"=>$greeting]);}}
Теперь при вызове метода index() через переменную $greeting на страницу будет отправляться текст приветствия.
Контроллеры могут быть с параметрами. Создадим контроллер PageController с методом, который имеет входной параметр. Такой action-метод контроллера может отвечать на множество URL-адресов, сформированных по определенному шаблону. Можно заметить также, что PageController не имеет базового класса.
<?phpnamespaceApp\Http\Controllers;classPageController{//publicfunctionpages(string$uri){$greeting="Привет, я ";switch($uri){case"page1":case"page2":$greeting.=$uri;break;// Если закомментировать эту строку,// ошибка 404 отправляться не будет.default:abort(404);}returnview("pages.page",["greeting"=>$greeting]);}}
Метод pages анализирует входной параметр: существует запрошенная страница – отправляется приветствие, в противном случае генерируется ошибка 404. Если закомментировать строку с функцией abort(404), ошибка отправляться не будет и сайт будет работать некорректно.
Добавим action-метод comments в HomeController (см. выше) для обработки отправленных пользователями комментариев. Данный метод имеет параметр типа Request посредством которого извлекаются данные HTML forms страницы сайта.
Маршрутизация URL-адресов для страниц веб-приложения в Laravel определяется в файле routes/web.php. Каждый action-метод контроллера в маршрутизаторе связывается с конкретным URL-адресом.
Статические функции класса Routeget(post) определяют тип запроса, url, контроллер и его action-метод. Конструкция [HomeController::class,"index"] указывает полное имя класса контроллера вместе с пространством имен и название вызываемого метода.
Создадим простую иерархию представлений, которые возвращают методы контроллеров, описанных выше:
views
shared
layout.blade.php
home
index.blade.php
comments.blade.php
pages
page.blade.php
Представления построены на стандартном для Laravel движке Blade. shared.layout.blade.php — это мастер-страница, шаблон для всех представлений, наполнена стандартным контентом HTML 5. Разметка мастер-страницы:
Для защиты от атак с подделкой межсайтовых запросов (CSRF), в HTML формы представлений Laravel обязательно включается токен @csrf. Если вы забудете его добавить в форму, то отправки данных на сервер не будет и выбросится ошибка 419 PAGE EXPIRED.
Исходник представляет собой небольшой сайт на контроллерах и представлениях, для упрощения роль моделей исполняет программный код в action-методах контроллеров.
Исходник написан в редакторе кода Visual Studio Code. Для комфортной работы с фреймворком PHP Laravel желательно установить следующие расширения:
- PHP Tools for Visual Studio Code,
- Laravel Blade formatter,
- Laravel Extra Intellisense,
и другие по вашим предпочтениям. Установить расширения можно непосредственно из редактора кода или скачать с официального сайта Extensions for Visual Studio Code.