Автор(ы): Андрей Кудлай
Вы сможете изучить фреймворк CodeIgniter4, программирование на PHP с применением ключевых новинок PHP 8. А также основы работы с MySQL и объектно-ориентированного программирования.
После прохождения курса, при должном усердии и ответственном подходе к материалам видеокурса, вы получите уже готовую CMS для интернет-магазина с базовым функционалом и на её основе сможете разрабатывать на заказ интернет-магазины.
Поскольку CodeIgniter – это фреймворк, написанный на PHP, соответственно, для успешного изучения фреймворка вам необходимы знания и навыки работы с языком программирования PHP
В уроках первой части вы найдете всю необходимую базу для понимания принципов работы с CodeIgniter и для дальнейшего самостоятельного изучения этого фреймворка. Фактически, данная часть курса является необходимым фундаментом для дальнейшего изучения и работы с фреймворком.
Из уроков первой части вы узнаете, как установить и настроить CodeIgniter, узнаете о паттерне MVC и его компонентах – контроллерах, моделях и видах, научитесь работать с классами валидации данных и конструктором запросов. Много уроков отведено под такие темы, как: роутинг, работа с моделями, работа с шаблонами и представлениями и т.д.
Вторая часть курса будет посвящена повторению и закреплению пройденного в первой части материала.
Во второй части полученные знания будут применены на практике, и в качестве практики будет создан интернет-магазин с базовым функционалом: категории товаров, товары, корзина, оформление заказа, авторизация, регистрация, личный кабинет пользователя и, конечно же, админская часть сайта.
Часть №1. Фреймворк CodeIgniter4. Теория
В первом уроке курса рассмотрены организационные моменты, структура и содержание курса. Из урока вы узнаете об основных источниках документации, о фреймворке CodeIgniter, а также необходимых программах для дальнейшей работы.
После установки фреймворка вы увидите достаточно большое количество файлов и папок. С некоторыми из них придется работать достаточно часто, с некоторыми – очень редко, некоторые не придется открывать вовсе. Из данного урока вы узнаете больше о структуре фреймворка и вкратце познакомитесь с каждой из директорий структуры, с которыми придется работать в дальнейшем.
Из этого урока вы узнаете о конфигурации в CodeIgniter. Здесь вы узнаете о настройках среды и файле .env, в котором эти настройки собраны, узнаете о том, как получить существующие настройки, изменить их и создать, при необходимости, собственные настройки.
Одним из ключевых компонентов паттерна MVC является контроллер. Именно в контроллер передается клиентский запрос из маршрутизатора и именно контроллер решает, какие модели и представления необходимы для того, чтобы обработать этот запрос и вернуть необходимый ответ. Данный урок будет посвящен знакомству с контроллерами в CodeIgniter4.
Следующие два урока будут посвящены такой важной теме, как роутинг или маршрутизация в CodeIgniter. Именно маршрутизатор принимает клиентский запрос и определяет, что с ним делать дальше, в какой контроллер и экшен передать данный запрос. Роутинг в CodeIgniter – очень гибкая и мощная штука. Также маршрутизатор фреймворка умеет различать методы запросов, что может быть полезно при разработке ваших приложений.
Следующие два урока будут посвящены теме представлений. Представления или виды – это одна из составляющих архитектурного паттерна MVC, которая отвечает за отображение данных, т.е. задача вида – показать полученный набор данных. При этом CodeIgniter позволяет при необходимости подключать сколько угодно видов в рамках одной страницы.
CodeIgniter4 предлагает возможность создания кусочков представлений, т.н. View Cells. Если говорить проще, то их можно сравнить с некими виджетами, которые можно получить один раз и использовать на каждой странице в шаблоне. Например, на сайте есть сайдбар, который одинаков для каждой страницы. Для сайдбара необходимо получить некоторый набор данных и сделать это можно только один раз, используя View Cells.
Как и все современные PHP-фреймворки, CodeIgniter4 оперирует не только понятием представлений, но и понятием шаблонов. Использование шаблонов позволяет избежать необходимости множественного подключения представлений, поскольку весь повторяющийся HTML можно вынести в шаблон, а сам шаблон наследовать в представлении.
Познакомившись с понятием представлений, шаблонов и виджетов в CodeIgniter4, можно попробовать закрепить полученные знания небольшой практикой. В качестве практики будет взят простейший шаблон Bootstrap, интеграция которого и будет показана в следующей паре уроков.
Как и любой современный PHP-фреймворк, CodeIgniter4 предлагает несколько вариантов для взаимодействия с БД. Одним из самых удобных и простых – является использование моделей. Благодаря моделям мы имеем автоматическое подключение не только к БД, но и к соответствующей таблице, с которой работает модель. Также модели предлагают набор стандартных методов CRUD для работы с данными, автоматическую валидацию данных на основе правил валидации модели, автоматическую пагинацию и т.д.
Кроме моделей, CodeIgniter также предлагает и другие средства для работы с БД. В частности, можно использовать конструктор запросов или же писать чистые SQL-запросы, передавая их в соответствующий метод. Этот вариант может быть полезен при работе с большими и сложными запросами или же в тех случаях, когда вам не нужна модель для работы с таблицей, но нужно получить данные из этой таблицы.
Практически любое приложение взаимодействует с пользователем, получая от него некоторый набор данных. Одним из ключевых правил безопасности является то, что необходимо проверять, валидировать пользовательские данные. И здесь CodeIgniter предлагает удобный механизм валидации данных в виде объявления массива правил валидации. В этих правилах достаточно указать соответствующие валидаторы и их параметры при необходимости – остальное сделает сам фреймворк. В следующих уроках вы познакомитесь с темой валидации данных в CodeIgniter.
С темой валидации данных связана тема загрузки файлов и проверки загружаемых файлов. При загрузке нам не просто нужно сохранить файл в папку, но и желательно проверить этот файл. Проверить его тип и размер на соответствие желаемым параметрам. Это позволяют сделать специальные валидаторы. При этом CodeIgniter умеет применять эти валидаторы как к одному, так и сразу к нескольким загружаемым файлам.
При работе с изображениями CodeIgniter позволяет не только проверить и сохранить картинку, но и произвести с ней какие-либо операции: например, обрезать или масштабировать изображение. В данном уроке вы познакомитесь с инструментарием, который предлагает фреймворк для работы с изображениями.
Сессии используются фактически в любом проекте. Благодаря им, можно реализовать механизм авторизации, например. CodeIgniter предлагает отдельную библиотеку для работы с сессиями, и мы можем использовать как ее методы для работы с данными сессии, так и нативный механизм PHP.
Из данного урока вы узнаете, как можно организовать функционал регистрации пользователей на сайте, используя возможности фреймворка CodeIgniter4, изученные в предыдущих уроках.
Из данного урока вы узнаете, как можно организовать функционал авторизации пользователей на сайте, используя возможности фреймворка CodeIgniter4, изученные в предыдущих уроках.
Одной из удобных возможностей современных PHP-фреймворков являются фильтры контроллеров. Фильтры позволяют выполнить какие-либо действия до или после вызова контроллера. Соответственно, используя данную возможность, можно ограничить доступ к определенной группе контроллеров для пользователей, реализуя тем самым закрытую часть сайта.
Часть 2. Фреймворк CodeIgniter4. Практика создания сайтов
В первом уроке практической части мы установим фреймворк CodeIgniter4 и произведем его первоначальную настройку. Также будет рассмотрен шаблон сайта, который будет создан в рамках данной части курса.
Во втором уроке практической части будут созданы первые контроллеры и маршруты приложения. Разработка будет начата с админской части сайта, поэтому это будут контроллеры и маршруты именно админской части сайта. Для создания контроллеров будет использована утилита spark фреймворка, которая позволяет создавать файлы и генерировать базовый код.
Для админской части сайта необходим простой и качественный шаблон. В качестве такового будет использован популярный бесплатный шаблон AdminLTE, который мы интегрируем в данном уроке.
Текущий урок будет посвящен авторизации администратора. Для успешной авторизации в админке пользователю нужно не только правильно ввести логин и пароль, но и иметь права для доступа к админской части сайта. Это будет реализовано проверкой роли пользователя.
Для ограничения доступа к админке и проверки роли пользователя будут использованы фильтры контроллеров, которые позволят проверить, что доступ к админским контроллерам запрашивает пользователь с ролью администратора.
В следующей паре уроков будет реализована страница со списком категорий. На этой странице администратор сможет выбрать для редактирования или удаления нужную категорию или же перейти к добавлению новой категории.
В следующей паре уроков будет реализован функционал добавления категории. Для поля описания категории мы подключим визуальный редактор CKEditor, а для загрузки изображений воспользуемся файловым менеджером CKFinder.
В данном уроке будет реализован функционал редактирования категорий. На соответствующей странице админки менеджер сможет изменить как название категории, так и ее описания.
В данном уроке будет реализован функционал удаления категорий. Администратор сайта сможет выбрать категорию из списка и удалить ее, если в ней нет товаров.
В процессе разработки необходим некоторый набор данных, с которыми можно работать. В случае с интернет-магазином это должны быть товары и категории товаров. Создавать товары вручную – слишком долго и утомительно. Поэтому для создания набора тестовых данных часто прибегают к генераторам. В этом уроке мы воспользуемся классом Faker из набора библиотек фреймворка для генерирования тестовых данных.
В текущем уроке будет реализована страница со списком товаров. На этой странице администратор сможет выбрать для редактирования или удаления нужный товар или же перейти к добавлению нового товара.
В данном уроке на страницу со списком товаров мы добавим фильтр. Используя фильтрацию, будет возможно отобрать товары по нужной категории, а также выбрать скрытые или активные товары.
В следующей паре уроков будет реализован функционал добавления товаров. Здесь будет достаточно много полей, через которые менеджер сможет заполнить всю необходимую информацию о товаре. Также к товарам можно будет прикреплять основное и дополнительные изображения.
В данном уроке будет реализован функционал редактирования товаров. На соответствующей странице админки менеджер сможет изменить как название товара, так и его описания, а также прочую информацию о товаре.
В данном уроке будет реализован функционал удаления товаров. Также товар возможно не удалять, а просто скрыть, чтобы он не выводился на страницах сайта.
В текущем уроке будет реализована страница со списком пользователей. На этой странице администратор сможет выбрать для редактирования или просмотра профиль конкретного пользователя. Также с этой страницы можно перейти к добавлению нового пользователя.
В предлагаемом уроке будет реализован функционал добавления пользователей. При добавлении администратор сможет указать роль нового пользователя, добавив, как обычного пользователя сайта, так и нового администратора.
Следующим функционалом по работе с пользователями будет возможность редактирования профиля пользователя. Здесь можно будет изменить как стандартные данные профиля – email, пароль, адрес – так и роль пользователя.
Ключевой функционал админки готов и можно переходить к разработке пользовательской части сайта. В этом уроке будет показан перенос шаблона пользовательской части в структуру создаваемой CMS.
Как правило, на главной странице интернет-магазина выводятся акционные предложения товаров. В данном уроке будет реализован вывод хитов на главную страницу магазина.
В этом уроке будет реализован вывод меню категорий интернет-магазина. Поскольку меню категорий находится на каждой странице сайта, его вывод будет сделан в виде виджета (View Cells).
Следующей страницей интернет-магазина будет страница категории. На этой странице пользователь сможет посмотреть товары выбранной категории. Также на странице будет представлено описание категории, сортировка товаров и постраничная навигация по товарам выбранной категории.
В данном уроке будет реализована страница отдельного товара. На этой странице пользователь сможет посмотреть подробную информацию о товаре, его изображения, а также добавить в корзину нужное количество выбранного товара.
Следующие три урока отведены под реализацию функционала добавления товара в корзину. Добавление товара будет происходить асинхронно, т.е. без перезагрузки страницы. При этом товар возможно добавить как с главной страницы, так и со страницы категории и страницы товара.
В этом уроке будет реализован функционал удаления товара из корзины. Удаление товара из корзины будет происходить асинхронно на всех страницах, кроме страницы оформления заказа. На указанной странице после удаления товара страница будет перезапрашиваться.
Любой интернет-магазин предполагает функционал регистрации и авторизации пользователей, а также личный кабинет пользователя. В данном уроке будет добавлена авторизация пользователей.
В текущем уроке будет добавлена регистрация пользователей. При регистрации будет проведена необходимая валидация полученных данных. В частности, будет проверена уникальность введенного адреса email с тем, чтобы на сайте не оказалось двух пользователей с одинаковым адресом электронной почты.
Следующие три урока посвящены оформлению заказа. При оформлении заказа пользователь может вводить разный набор данных. Так, если пользователь зарегистрирован и авторизован, ему будет показано только поле с примечанием к заказу, которое можно заполнить при желании. Если же пользователь не авторизован, тогда ему будет предложено заполнить и дополнительные поля, такие как email, адрес и т.п. После сохранения заказа информация о нем будет отправляться на email менеджера магазина и клиента, оформившего заказ.
Авторизованный пользователь будет иметь доступ к личному кабинету на сайте. Среди прочего, в личном кабинете он сможет посмотреть все свои заказы с подробной информацией о заказе и его статусе. В этом уроке будет создана страница со списком заказов в личном кабинете пользователя.
Из списка заказов в личном кабинете пользователь сможет выбрать любой заказ для просмотра подробной информации о заказе: товары заказа, дата создания и изменения статуса, статус заказа, его сумма, примечание и т.п. В данном уроке будет реализован просмотр отдельного заказа в личном кабинете.
Кроме просмотра заказов в личном кабинете также будет реализована возможность редактирования профиля пользователя. Здесь пользователь сможет изменить свои данные, например, свой адрес или пароль учетной записи.
Кроме категорий и товаров в интернет-магазине также должен быть некоторый минимум постоянных страниц. Это страницы с различной информацией для покупателя: информацией о доставке и оплате, о гарантии и т.д. В уроке будет реализован вывод меню постоянных страниц в футере сайта.
Возвращаемся к дорабатыванию админки. Теперь пользователи могут оформлять заказы и, соответственно, оформленные заказы должны быть показаны администратору сайта, и администратор должен их просматривать и обрабатывать. Для того, чтобы иметь достаточное количество данных, в этом уроке будут сгенерированы несколько сотен тестовых заказов.
В текущем уроке будет создана страница с выводом списка заказов. На этой странице администратор сможет выбрать нужный заказ для просмотра его деталей и изменения его статуса.
Данный урок будет отведен под реализацию функционала управления заказами. Фактически здесь будет реализовано изменение статуса заказа с «Новый» на «Завершенный».
В текущем уроке будет реализован просмотр профиля выбранного пользователя в админке. Здесь администратор сможет не только посмотреть данные профиля пользователя, но и все заказы, сделанные выбранным пользователем.
Последний урок курса посвящен реализации главной страницы админки – Dashboard. На этой странице, как правило, выводится какая-то статистика по магазину: количество заказов, товаров, пользователей и т.д. Среди прочего мы также реализуем определенную аналитику в виде графика сумм продаж за выбранный год с разбивкой по месяцам.