
Мы преодолели базовую функциональность MySQL. Я хочу рассказать о нормализации и сделаю это в следующей статье, но я считаю, что нам нужно представить контроллеры. Это упростит концепцию, когда вы начнете изучать Laravel, поскольку это среда MVC.
Что такое MVC-фреймворк?
MVC означает Модель, Представление, Контроллер. Я не собираюсь вдаваться в строгие определения вроде чего-то, чего-то, бизнес-логики. Давайте говорить по-человечески.
- Модель — класс, взаимодействующий с базой данных. В наших предыдущих примерах это класс
Author. - Вид — HTML и CSS. Что увидит пользователь.
- Контроллер — класс, который управляет связью между моделью и представлением. Мы получим данные из модели и отправим их в представление. Как только представление смешает все вместе, оно вернется
- Маршрут — нам все еще нужен наш файл маршрута. Когда приходит запрос, он направляет этот запрос контроллеру, а контроллер обрабатывает все остальное.
План
В настоящее время наш файл маршрута также обрабатывает большую часть функций контроллера. Нам нужно:
- Создайте
AuthorController - Переместите определенные данные из нашего файла маршрута
index.phpв наш файлAuthorController.
Вот как сейчас выглядит наш файл index.php. Мы выполняем основные операции CRUD над Author, поэтому нам нужно создать контроллер, который может обрабатывать эти операции.
Есть также кое-что, что нам нужно сделать с каждым из наших представлений. В настоящее время это смешано с извлечением данных из базы данных и внедрением их в наш HTML-код. Это не функция представления, поэтому нам нужно перемещать их одно за другим. Мы также преобразуем каждое из наших представлений в классы. В других фреймворках вы, вероятно, не стали бы этого делать, но здесь задействовано гораздо больше фоновой логики.
АвторКонтроллер
Пришло время сгенерировать базовый скелет для AuthorController. Он должен выполнять следующие функции:
- Просмотреть всех авторов
- Показать одного автора
- Показать одного автора в форме, готовой к обновлению
- Обработать обновление
- Показать пустую форму, чтобы вставить автора
- Вставить автора
- Удалить автора
Теперь нам осталось его заполнить. Прежде чем мы это сделаем, давайте взглянем на нашу структуру папок.
Application/
index.php
Controllers/
AuthorController.php
HomeController.php
Models/
Author.php
Views/
author/
create.php
edit.php
index.php
show.php
home/
index.php
Базовая подготовка
Начнем с основного. Первое, что сделал наш файл index.php, — это проверил наличие страницы. Если это не так, он представляет ссылки на различные страницы. Мы не хотим, чтобы эти страницы присутствовали там.
Мы хотим, чтобы они хранились в собственном представлении. С этим представлением нам также нужен контроллер: файл HomeController. Но действительно ли мы? В Laravel вы можете вернуть представление непосредственно в файл маршрута. Мы продолжим и создадим HomeController, так как это дает нам хороший и простой взгляд на создание контроллера.
Давайте рассмотрим пошаговый подход и рассмотрим его без контроллера и с контроллером.
Создайте Application/Views/home/index.php, который содержит класс HomeView с нашими ссылками, хранящимися в методе index. Это понадобится в любом случае.
Класс довольно простой. У него всего один метод, который возвращает две ссылки.
Маршрут просто захватывает HomeView и echos все, что было возвращено в методе index, которые являются двумя ссылками. Затем приложение завершает работу.
Как это выглядит с контроллером. Во-первых, нам нужен файл HomeController. Мы создадим это в Application/Controllers/HomeController.php.
Файл маршрута index.php должен просто указывать на метод HomeController->index.
Мы действительно не урезали код. Мы просто переместили код и фактически создали больше кода. В чем смысл? Все дело в разделении логики. Это не то, что маршрут должен делать: это то, что должен делать контроллер. А иногда контроллер кажется ненужным. Но вскоре мы увидим, какой цели на самом деле служит контроллер, когда мы перейдем к нашему AuthorController.
Автор Создать
Первый для автора довольно прост. Это почти идентично тому, что мы только что сделали. Это форма, которая будет отображаться, когда пользователь захочет добавить нового автора. Что нам нужно сделать?
- Создайте
Views/author/create.php. - Добавьте код в
Controllers/HomeController.php - Измените
index.php, чтобы вызватьcreate
AuthorController должен отображать HTML.
Последний бит — изменить файл маршрута index.php.
Авторский указатель
Следующим шагом является просмотр всех авторов. Еще раз пройдемся по плану. Наш текущий код имеет как процесс поиска, так и создание представления в одном файле.
Это нужно разделить. Во-первых, давайте создадим файл Views/author/index.php. Он будет содержать одну функцию, которая принимает массив данных. Это будут все авторы. Каждый автор проходит через цикл, и генерируется окончательный вывод HTML. HTML возвращается.
Откуда взялся аргумент $authors? От AuthorController.
Мы ввели нашу модель Author в AuthorController, так как контроллер взаимодействует как с моделью, так и с представлениями. Метод select_all возвращает всех авторов из таблицы authors. Затем эти авторы передаются в качестве аргумента методу IndexView->index. Поскольку метод index возвращает HTML, мы можем просто echo вывести информацию.
Последняя часть — изменение файла маршрута index.php.
Автор Шоу
Как только пользователь нажимает на ссылку в разделе «Просмотреть всех авторов», он переходит к просмотру отдельного автора. Мы уже не создали слишком много нашего представления с тех пор, как объединили Show и Edit в один. Мы разделим это здесь.
Так что же происходит, когда пользователь нажимает на ссылку в поле зрения всех авторов?
- Ссылка отправляется на
index.phpс двумя параметрами:pageиauthor_id. author_idпередается методуAuthorController->show.- Метод извлечет содержимое автора из таблицы
authorsдля этого конкретногоidи передаст его в таблицуShowView.ShowViewсгенерирует HTML. - Метод
AuthorController->showechosвыводит возвращаемый HTML-контент.
Во-первых, вид. Он примет автора и сгенерирует контент для отображения автора. Внизу будет ссылка на редактирование автора. Ссылка не чистая: она должна быть edit_author, так как мы не следовали 100% идеальному соглашению об именах Laravel. Мы должны были добавить дополнительный аргумент, например type, и указать, что page равно author, а type равно edit. Я не хотел еще больше запутывать тему, поэтому оставим ее как edit_author.
Метод AuthorController->show будет вызывать это представление и передавать ему аргумент $author.
Метод show также получает аргумент: это метод $id. Откуда это? Он исходит из файла маршрута index.php.
Наш файл маршрута начинает выглядеть действительно чистым, как и наш контроллер. Это огромное преимущество разделения логики. Вы точно знаете, где должен быть определенный тип кода.
Автор Править
Это почти идентично Show, за исключением того, что будет отображаться форма.
EditView возвращает форму. Он заполняет форму данными, переданными из аргумента $author.
Метод edit получает $id из файла маршрута index.php.
И мы закончили с представлениями (почти). Нам нужно выяснить, где добавить кнопку Delete, но мы внесем эту модификацию после того, как закончим методы store и update.
Авторский магазин
Когда пользователь нажимает кнопку Update для обновления определенного пользователя, данные отправляются на сервер и в настоящее время обрабатываются в файле маршрута. Пришло время извлечь эти данные и переместить их в файл AuthorController.
Аргумент $author_details передается из маршрута. Это просто содержимое массива $_POST.
Автор Удалить
Где мы должны разместить кнопку? Мы можем разместить его на странице ShowView или странице EditView. Я вижу аргументы для обоих, но я добавлю их на страницу EditView.

Я знаю, отвратительно. Но мы здесь ради функциональности, а не красоты. Когда мы нажимаем Delete, наш маршрут направляет запрос методу AuthorController->destroy, который, в свою очередь, удаляет автора и перенаправляет пользователя обратно на страницу просмотра всех авторов.
Файл index.php по-прежнему выглядит просто.
Авторский магазин
Что происходит, когда пользователь вводит информацию об авторе и нажимает кнопку «Создать»? Запрос post отправляется, и мы его фиксируем. Это последняя модификация, которую нам нужно сделать. Кажется каким-то грустным.
AuthorController теперь готово.
Файл маршрута index.php также завершен.
Краткое содержание
Мы сделали это. Мы создали контроллер! Два, на самом деле. Спасибо за питание через эту статью. Я надеюсь, что вы видите логическое развитие того, как мы создавали наши контроллеры. Я знаю, что подсунул сюда архитектурный шаблон MVC, но он просто показался мне следующим логическим продолжением нашей статьи о CRUD MySQL. Увидимся в следующий раз.

Дино Кайич в настоящее время является руководителем отдела информационных технологий в Absolute Biotech, материнской компании LSBio (LifeSpan BioSciences, Inc.), Absolute Antibody, Kerafast, Everest BioTech, Nordic MUbio и Exalpha. ». Он также является генеральным директором MyAutoSystem. У него есть B.S. в области компьютерных наук, по специальности биология и более десяти лет опыта разработки программного обеспечения. Его опыт включает в себя создание приложений для электронной коммерции на уровне предприятия, разработку программного обеспечения на основе исследований и содействие распространению знаний посредством письма.
Вы можете связаться с ним в LinkedIn, подписаться на него в Instagram или подписаться на его публикацию в Medium.