Yii используется не только для создания web-приложений, но так же и для создания консольных приложений. Для него разработано достаточно много различных библиотек, виджетов, расширений и модулей для решения тех или иных задач, что позволяет в кратчайшие сроки создавать приложения.
Для работы web-приложений, написанных на фреймворке Yii 2, необходимо установка сервера с поддержкой PHP версии не ниже 5.4.0.
Целью данной работы является разработка проекта при помощи фреймворка Yii 2 для выявления его преимуществ и недостатков.
Для изучения данного PHP-фреймворка в начале необходимо ознакомится с его документацией.
Глава 1. Теоретические сведения о php-фреймворк Yii 2Фреймворк (англицизм неологизм от англ. framework букв. – каркас, структура) – программная платформа для различных программ и функции в операционных системах Windows и Linux.
Понятие фреймворка родственно с «библиотекой», хотя и есть значительные отличия. От библиотек фреймворки отличаются тем, что библиотека может быть использована при создании программного продукта как набор схожих по функционалу подсистем, не влияя на архитектуру и не накладывая ограничений. Фреймворк же, наоборот диктует правила построения архитектуры приложения, создавая каркас, который в ходе работы будет только расширяться и изменяться согласно указанным требованиям.
Одним из главных преимуществ при использовании фреймворков является то, что веб-приложения часто используют стандартизированную структуру организации компонентов. Таким образом создание структуры приложения при разработке значительно упрощается.
Фреймворки привязаны к различным языкам программирования и имеют характерные названия, например:
- PHP – php-фреймворк;
- JavaScript – js-фреймворк;
- CSS – css-фреймворк;
- и т.д.
PHP - наиболее популярный скриптовый язык общего назначения, применяемый для разработки web-приложений. Однако в связи с ростом потребностей в более сложных и функциональных приложений, появилась необходимость структурировать и организовать сам процесс разработки. И PHP-фреймворки стали решение в проблеме разработки.
Использование PHP-фреймворков:
- сокращает время разработки проектов;
- избавляет от проблемы с повторяющимся кодом;
- позволяет уменьшить нагрузку на процесс разработки, за счет масштабируемости и легко расширяемости проектов;
- обеспечивает безопасность сайтов;
- повышает производительность проектов.
Рис 1.1. Концепция PHP фреймворков
На данный момент большинство PHP-проектов построены при помощи архитектуры MVC. MVC (Model View Controller, «Модель-Представление-Контроллер») – архитектурный шаблон проектирования, который позволяет отделить бизнес-логику от пользовательского интерфейса, а так же выделить область логики которая производит обмен информации между базой данных и пользовательским интерфейсом.
MVC включает в себя три компонента: Модель (Model), Представление (View), Контроллер (Controller).
Рис 1.2. Архитектура MVC
Популярные PHP-фреймворки:Yii, Symphony, Zend, Kohana и CodeIgniter. Рассмотрим PHP-фреймворк на примере фреймворка Yii 2.
Началом истории Yii можно считать 1 января 2008 года, как проект по исправлению некоторых изъянов в фреймворке PRADO (победителя «Zend PHP 5 coding contest»).
Фреймворк PRADO был попыткой перенести ASP.NET на платформу PHP, включая ViewState, PostBacks, Page_Load и OnClick, вследствие чего встречались участки кода, просто скопированные из ASP.NET. К примеру, можно отнести, разделение на Rare Fields и Occasional Fields в классе Control с целью оптимизации по памяти, которое имеет смысл в .NET, но представляет сомнительную ценность в PHP. PRADO унаследовал от ASP.NET почти все отрицательные стороны: медленная обработка сложных страниц, сложность в обучении, проблемы в настройке.
После чего основатель и разработчик ядра фреймворка PRADO — Qiang Xue пришли к выводу, что PHP-фреймворк должен быть построен несколько по-другому. В октябре 2008 года, после более 10 месяцев закрытой разработки, вышла первая альфа-версия. 3 декабря 2008 был выпущен Yii 1.0
Таблица 1.1. Обозначения версий
Цвет |
Обозначение |
Красный |
Старая версия, не поддерживается |
Жёлтый |
Старая версия, пока поддерживается |
Зелёный |
Текущая версия |
Голубой |
Будущая версия |
Таблица 1.2. История версий
Ветка |
Версия |
Дата выпуска |
Окончание поддержки |
Системные требования |
1.0 |
1.0 |
3 декабря 2008 |
31 декабря 2010 |
PHP 5.1.0 или выше |
1.0.1 |
4 января 2009 |
|||
1.0.2 |
1 февраля 2009 |
|||
1.0.3 |
1 марта 2009 |
|||
1.0.4 |
5 апреля 2009 |
|||
1.0.5 |
10 мая 2009 |
|||
1.0.6 |
7 июня 2009 |
|||
1.0.7 |
5 июля 2009 |
|||
1.0.8 |
9 августа 2009 |
|||
1.0.9 |
6 сентября 2009 |
|||
1.0.10 |
18 октября 2009 |
|||
1.0.11 |
13 декабря 2009 |
|||
1.0.12 |
14 марта 2010 |
|||
1.1 |
1.1.0 |
10 января 2010 |
31 декабря 2012 |
PHP 5.1.0 или выше |
1.1.1 |
14 марта 2010 |
|||
1.1.2 |
2 мая 2010 |
|||
1.1.3 |
4 июля 2010 |
|||
1.1.4 |
5 сентября 2010 |
|||
1.1.5 |
14 ноября 2010 |
|||
1.1.6 |
16 января 2011 |
|||
1.1.7 |
26 марта 2011 |
|||
1.1.8 |
26 июня 2011 |
|||
2.0 |
2.0 альфа |
декабрь 2011 |
В разработке |
PHP 5.3.0 и выше |
Возможности фреймворка Yii 2:
Высокая производительность и простота в обучении;
Структура проекта строится по паттерну Модель-Представление-Контроллер(MVC);
Интерфейсы DAO и ActiveRecord для работы с базами данных (PDO);
Поддержка интернационализации, построение словоформ;
Кэширование страниц и отдельных фрагментов;
Перехват и обработка ошибок;
Ввод и валидация форм;
Аутентификация и авторизация;
Использование AJAX и интеграция с jQuery;
Генерация базового PHP-кода для CRUD-операций (скаффолдинг);
Поддержка тем оформления для их лёгкой смены;
Возможность подключения сторонних библиотек;
Миграции базы данных;
Автоматическое тестирование;
Поддержка REST.
Основные части, из которых состоит приложение на фреймворке Yii:
Контроллеры (controller) это объекты классов, унаследованных от yiibaseController, принимающие входные данные от пользователя и преобразовывающие их в понятный для моделей формат и команды, а также отвечают за отображение нужного представления;
Представления (view) это код, который отвечает за представление данных конечным пользователям. В веб приложениях view создаются обычно в виде view - шаблонов, которые суть PHP скрипты, в основном содержащие HTML код и код PHP, отвечающий за представление и внешний вид;
Модель (model) это объекты бизнес данных, правил и логики;
Входные скрипты (обычно index.php) это php-скрипты которые доступны напрямую конечному пользователю приложения. Они ответственны за запуск и обработку входящего запроса;
Приложения (application) это глобально доступные объекты, которые осуществляют корректную работу различных компонентов приложения и их координацию для обработки запроса;
Действие (action) это основные блоки, к которым может обращатьсяконечный пользователь и запрашивать исполнение того или иного функционала;
Макет (layout) это специальное представление для вставки других представлений. Обычно он содержит части пользовательского интерфейса, используемого другими представлениями.
Виджет (widget) это компонент для генерации самодостаточного элемента пользовательского;
Компонент (component) представляет сущность какого-либо аспекта веб-приложения. Например, авторизация пользователей. В yii много готовых компонентов, которые могут использоваться как в готовом виде, так и расширяться веб-разработчиками.
Модуль (module) это законченные программные блоки, состоящие из моделей, представлений, контроллеров и других вспомогательных компонентов. При установке модулей в приложение, конечный пользователь получает доступ к их контроллерам.
Структура приложения на фреймворке Yii 2 представлена на рис. 1.3.
Рис. 1.3. Структура приложения Yii
Жизненный цикл работы приложения, представлен на рис. 1.4.
Рис. 1.4. Схема обработки запроса
Каждому шагу соответствует определенное действие:
1. Пользователь делает запрос к входному скрипту web / index.php.
2. Скрипт загружает конфигурацию приложения и создает экземпляр приложения для обработки запроса.
3. Приложение разрешает запрошенный маршрут с помощью компонента приложения-запроса.
4. Приложение создает экземпляр контроллера для обработки запроса.
5. Контроллер создает экземпляр действия и выполняет фильтры для действия.
6. Если какой-либо фильтр не работает, действие отменяется.
7. Если все фильтры проходят, действие выполняется.
8. Действие загружает модель данных, возможно из базы данных.
9. Действие отображает представление, предоставляя ему модель данных.
10. Отрендеренный результат возвращается компоненту приложения ответа.
11. Компонент ответа отправляет обработанный результат в браузер пользователя.
Для выявления преимуществ и недостатков данного фреймворка, сравним его с наиболее популярными, такими как: Zend Framework 2; CakePHP; Laravel 5.5; Symfony 3.3.
Сравнение фреймворка Yii 2 будет проходить по следующим критериям: требования, сложность установки и настройки, предполагаемые проекты и т.д.
В таблице 1.3. представлено сравнение с популярными фреймворками.
Таблица 1.3. Сравнение с популярными фреймворками
Параметры сравнения |
Zend Framework 2 |
CakePHP |
Laravel 5.5 |
Symfony 3.3 |
Yii 2.0 |
Требования |
PHP 5.4 и выше |
PHP версии 5.5.9 или выше |
PHP 5.4 и выше MCrypt PHP extension PHP JSON extension |
PHP 5.4 и выше |
PHP 5.4 и выше |
PSR |
соответствует PSR-2. |
соответствует PSR-2 |
соответствует второй версии стандартов PSR, PSR-2. |
соответствует второй версии стандартов PSR, PSR-2. |
соответствует второй версии стандартов PSR, PSR-2. |
Документация |
простые и подробные инструкции. |
простое и всеобъемлющее руководство. |
простое и доступное руководство. |
сложное руководство. |
простая инструкция по эксплуатации. |
Сложность установки и настройки |
Высокая |
Средняя |
Высокая |
Высокая |
Низкая |
Поддерживаемые базы данных |
MySQLMariaDB Oracle IBM DB2 Microsoft SQL PostgreSQL |
MySQLPostgreSQLSQLiteRedis Microsoft BI MongoDB |
MySQLSQLite Microsoft BI Oracle PostgreSQLMongoDB |
MySQLSQLite Microsoft BI Oracle PostgreSQLMongoDB |
|
Жёсткая структура каталогов |
Нет (рекомендации) |
Да |
Да |
Да |
Нет (рекомендации) |
Предполагаемые проекты |
Средние-большие |
Маленькие-средние |
Большие |
Большие |
Маленькие-большие |
Лицензия |
New BSD |
MIT |
MIT |
MIT |
New BSD |
Превосходство Yii над другими фреймворками заключается в эффективности, широких возможностях и качественной документации. Yii изначально спроектирован очень тщательно для соответствия всем требованиям при разработке серьёзных веб-приложений. Yii не является ни побочным продуктом какого-либо проекта, ни сборкой сторонних решений.
К преимуществам данного фреймворка можно отнести:
использование стандартных способов решения задач, что в свою очередь уменьшает (устраняет) запутанность кода;
сокращение времени, затрачиваемое на рутинные задачи, такие как проверка форм и безопасность;
облегчение командной работы с помощью соблюдения стандартов;
облегчение поддержки кода с использованием общей архитектуры и методов;
лицензию BSD;
интеграцию с современной java-script библиотекой jQuery которая поможет с лёгкостью создавать ajax элементы на страницах сайтов;
стандартные классы Yii заточены под высокий уровень безопасности что позволяет полностью обезопасить свой сайт от Sql-Inj, XSS, CSRF и других атак;
активное сообщество разработчиков, которые поддерживают фреймворк, обобщенные задачи, а также новые.
Существует пара недостатков использования фреймворка, которые следует отметить.
Во-первых, весь код, который включает в себя фреймворк, создает нагрузку на сервер, что может стать проблемой при создании больших проектов. Выходом из данной ситуации является кэширование, которое позволяет снизить последствия перегрузки, и для корпоративных приложений, имеется возможность использовать нативный SQL, для минимизации время выполнения запроса.
Во-вторых, фреймворк Yii является все еще молодым.
Глава 2. Разработка Web-приложения с помощью фреймворка yii2 2.1 Приложения, использованные при разработке проектаВ качестве проекта, для ознакомления с возможностями фреймворков, была выбрана разработка сайта садовых растений, который будет обладать следующими особенностями:
просмотр каталога растений;
поиск по растениям, вредителям и болезням;
добавление, редактирование и удаление данных о растениях, вредителях и болезнях.
Для оптимизации разработки проекта, а также удобства, были использованы следующие приложения:
XAMPP - это бесплатный локальный сервер с готовым комплектом web-сервера. В базовый комплект входит: Apache, MySQL, PHP (поддерживает PDF), Miniperl, SQLite, OpenSSL, phpMyAdmin и Ming. Поддерживает работу в системе Windows, Solaris, Mac OS X и Linux;
Notepad++ - свободный текстовый редактор на Windows, с функцией подсветки синтаксиса (CSS, HTML, Java, JavaScript, PHP, SQL и другие), с открытым кодом, нумерацией строк и всех необходимых функций;
AllFusion ERwin Data Modeler (ранее ERwin) — CASE-средство для проектирования и документированиябаз данных, которое позволяет создавать, документировать и сопровождать базы данных, хранилища и витрины данных;
phpMyAdmin — веб-приложение с открытым кодом, написанное на языке PHP и представляющее собой веб-интерфейс для администрирования СУБДMySQL. PHPMyAdmin позволяет через браузер и не только осуществлять администрирование сервера MySQL, запускать команды SQL и просматривать содержимое таблиц и баз данных.
Перед написанием web-приложения на Yii2, необходимо установить Apache, PHP и MySQL, которые входят в пакет сервера XAMPP. Запустить «Control Panel» и нажать старт «Apache».После запуска «Apache», необходимо проверить его на работоспособность (прописать в адресной строке localhost). Запустится страница, показанная на рис. 2.1.
Рис. 2.1. Страница web-сервера
Далее необходимо настроить виртуальный хостинг для дальнейшей работы. Для настройки в папку xampp/apache/conf/extra/httpd-vhosts.conf добавляются строки указанные в листинге 2.1.
Листинг 2.1. Строки, добавленные в документ httpd-vhosts.conf
#xamp
#httpd-vhosts.conf
##
##DocumentRoot "C:MyProjectssite.localwww"
##ServerNamesite.local
##ServerAliaswww.site.local
##ErrorLog "C:MyProjectssite.locallogserror.log"
##CustomLog "C:MyProjectssite.locallogsaccess.log" common
##
Создается папка в директории «C», с именем «MyProjects», а в ней папку «site.local». Внутрь помещается еще две папки: «www» и «logs». В «C:WindowsSystem32driversetchosts.conf» дописывается две строки указанные в листинге 2.2.
Листинг 2.2. Строки, добавленные в документ hosts.conf
127.1.0.1 site.local 127.1.0.1 www.site.local
Последним меняется файл Apache(httpd.conf), находящийся в контрольной панели «XAMPP». В него вставляется код указанный в листинге 2.3, после тега .
Листинг 2.3. Строки, добавленные в файл Apache(httpd.conf)
DocumentRoot "C:MyProjectssite.localwww"
## Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinksSymLinksifOwnerMatchExecCGIMultiViews
## Note that "MultiViews" must be named explicitly --- "Options All"
# doesn't give it to you.
## The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#Options Indexes FollowSymLinks Includes ExecCGI
## AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverrideFileInfoAuthConfig Limit
#AllowOverride All
## Controls who can get stuff from this server.
#Require all granted
Фреймворк устанавливается с официального сайта продукта. После загрузки пакета, необходимо его разархивировать и поместить в папку «C:MyProjectssite.localwww». Для правильной работы стартового приложения необходимо изменить строку «'cookieValidationKey' => '',» в файле web.php, находящегося в «C:MyProjectssite.localwwwconfig», прописав в кавычках «md5(‘asdFw42Q’)». Это необходимо для валидации cookie и исключения ошибки проекта. В результате этих действий стартовая страница проекта приходит с «localhost» на адрес «http://www.site.local/web/».
Изначально Yii2 имеет два вида шаблона «basic»(упрошенный шаблон) и «advanced»(продвинутый шаблон, разделен на frontend, backend и console.). В данном проекте используется шаблон «basic» представленный на рис. 2.2.
Рис. 2.2. Главная страница шаблона«basic»
Шаблон можно адаптировать под любые проекты, используя HTML и CSS, а также JavaScript и встроенный AJAX .
2.2 Проектирование и создание базы данныхОдним из важных аспектов создания web-приложения, является база данных. База данных – это информация, объединённая по общему признаку, используемая прикладными программами, для удовлетворения информационной потребности пользователей или организации.
Проектирования базы данных включает в себя:
Логическое проектирование - процесс создания модели используемой на предприятии информации на основе выбранной модели организации данных, но без учета типа целевой СУБД и других физических аспектов реализации;
Физическое проектирование - процесс подготовки описания реализации базы данных на вторичных запоминающих устройствах; на этом этапе рассматриваются основные отношения, организация файлов и индексов, предназначенных для обеспечения эффективного доступа к данным, а также все связанные с этим ограничения целостности и средства защиты.
Проектирование базы данных осуществлялось с помощью сase-средства ERwin. На рис. 2.3. представлена логическая модель базы данных.
Рис. 2.3. Логическая модель базы данных
На рис. 2.4. Представлена физическая модель базы данных.
Рис. 2.4. Физическая модель базы данных
Следующим шагом является подключение в приложения базы данных. Это возможно сделать в конфигурационном файле «C:MyProjectssite.localwwwconfigdb.php». Содержание файла представлено в листенге 2.4.
Листинг 2.4. Подключение к БД
После объявления классов создаются модели. В момент, когда пользователь отправляет данные формы, а модель их получает, необходимо удостовериться, что эти данные корректны, прежде
чем их использовать. Это осуществляется посредством проверки данных в соответствии с набором правил. Правила проверки задаются в методе rules(), который возвращает массив сконфигурированных правил.
Преставление (view) – это скрипт, написанный на языке программирования PHP, состоящий из элементов пользовательского интерфейса.
Представление идентифицируется по файлу скрипта в процессе рендеринга. Имя представления должно совпадать с названием файла. Чтобы отобразить представление, необходимо вызвать render(), указав имя представления.
Для реализации добавления необходимо создать представление (dob.php) в котором будет форма добавления, передающая данные в модель (DobForm.php), которая проверяет введенные в форму данные, а затем передает их в контроллер (SiteController.php) и далее обратно в представление. На листинге 2.6 представлен код формы добавления в файле dob.php.
Листинг 2.6. Листинг формы добавления.
Рис 2.6. Главная страница
С главной страницы можно перейти на страницы «Каталог», а так же страницу «Вредители и болезни». На рис. 2.7. представлена страница «Каталог».
Рис 2.7. Страница «Каталог»
На рис. 2.8. представлена страница «Вредители и болезни».
Рис 2.8. Страница «Вредители и болезни»
В web-приложении так же реализованы добавление, редактирование и удаление. На рис.2.9. представлена форма добавления.
Рис. 2.9. Форма добавления
На рис. 2.10. представлен результат добавления.
Рис. 2.10. Результат добавления
Так же можно подробнее просмотреть информацию о любом растении. На рис. 2.11. представлено подробное описание растения.
Рис. 2.11. Подробное описание растения
Для редактирования необходимо нажать соответстующую кнопку, после чего произойдет переход на страницу редактирования. На рис. 2.12. представлен переход на форму и изменение данных.
Рис. 2.12. Форма редактирования
Измененные данные представлены на рис. 2.14.
Рис. 2.13. Измененные данные
Поиск по странице «Каталог» представлен на рис. 2.14.
Рис. 2.14. Поиск
В Yii вложено много возможностей которые выделяют этот фреймворк на фоне остальных и делают разработку с его помощью очень быстрой и приятной.
При разработкепроекта при помощи фреймворка Yii 2 были выявления его преимущества:
Отличная поддержка. Для русскоязычных пользователей на официальном форуме фреймворка создан собственный раздел где можно всегда получить ответы на вопросы.
Помощь от разработчика фреймворка. Большой плюс поддержки Yii - это возможность в любой день пообщаться и задать вопросы разработчику Yii на форуме.
Полная поддержка ООП. Фреймворк полностью заточен под пятую версию (и выше) php что позволяет поддерживать весь функционал при обьектно ориентированном программировании.
Генератор кода. Yii предоставляет отличный встроенный генератор исходного кода. Указав лишь основные параметры - Yii генерирует общую структуру приложения которая будет содержать все необходимые модели/контроллеры/отображения для старта.
Темы. Благодаря встроенной поддержке тем можно изменять дизайн приложения в пару нажатий клавиш.
Защита. Все стандартные классы Yii заточены под высокий уровень безопасности что при умелом обращении позволяет полностью обезопасить свой сайт от Sql-Inj, XSS, CSRF и других атак.