PHPixieвключает по умолчанию отличные инструменты для криптографии и для обеспечения безопасности, поддержку MongoDB, возможность «обмена» кодом с компоновщиком.
Целью данной работы является разработка проекта при помощи комплексного фреймворка PHPixieдля выявления его преимуществ и недостатков.
Глава 1. Теоретическая часть разработки сайта с использование фреймворка phpixieВ процессе разработки сайта может измениться многое, начиная от дизайна до бизнес-логики. К примеру, при необходимости добавления на сайт, в коде которого с самого начала наблюдается сильная связанность (зависимость одних функций от других) различных модулей (например, новый раздел с материалами, личный кабинет пользователя или почтовую рассылку)то время на разработку увеличивается, а число ошибок возрастает. Можно решать возникающие проблемы быстрыми заплатами («костыльный» подход,) однако, это неизбежно ведёт к тому, что код становится сложным и запутанным.
Чтобы исключить возможные проблемы, можно изначально создавать программу на жёстком каркасе, который позволяет подключать к себе дополнительные модули. По сути, свой код в таких каркасахможно писатьтолько в тех местах, где это разрешено создателями каркаса (в так называемых «точках расширения»).
В мире программирования описанный каркас называют фреймворком (framework).Фреймворк – не обычная программная библиотека. Если библиотека – это просто набор функций, которые не влияют на архитектуру программы, то фреймворк сам, по сути, является архитектурой. Каркас гарантирует стандартную структуру программ и их поведение по умолчанию.
Существуют веб-фреймворки (web application framework, WAF) – это фреймворки для веба. На их основе можно делать не только сайты, но и любые другие онлайн-приложения.Большинство веб-фреймворков построено по архитектуре Model–View–Controller (MVC). Данные в MVC отделены от бизнес-логики, а та, в свою очередь, – от представления (внешнего вида).
Набор компонентов веб-фреймворка:
Шаблонизатор - отвечает за независимость вёрстки от программного кода;
Роутер -распознаёт URL, по которому произошло обращение к серверу;
Модуль доступа к базе данных;
Модуль кэширования-ускоряет загрузку страниц;
Модуль безопасности -аутентификация и авторизация пользователей;
Файлы конфигурации.
Фреймворки также управляют сессиями, ведут логи, упрощают использование Ajax и умеют многое другое.
Таким образом, создавая сайт на базе фреймворка, пользователь уже имеет доступ к огромному количеству готовых функций. Все основные вещи – от доступа к базе данных до отдачи готовой страницы браузеру – уже написаны создателями фреймворка.
Среди популярных современных веб-фреймворков – PHPixie, Zend Framework, Yii, Symfony2, Laravel, CakePHP (PHP), Django (Python), Ruby on Rails (Ruby).
Существуют так называемые микрофреймворки. Как следует из названия, они отличаются небольшим размером и количеством функций. Микрофреймворки хорошо подходят для простых проектов (сайты-визитки), быстрого прототипирования и создания API. Наиболееизвестны Silex, Fat-Free, Slim (PHP), Bottle, Flask (Python).
Для чего подойдут веб-фреймворки:
для крупных сайтов. Гибкость, расширяемость, масштабируемость решений, простота поддержки – все лучшие черты фреймворков раскрываются именно на больших проектах.
для рефакторинга старого сайта.
для уникальных проектов. Фреймворк – конструктор, из деталей которого можно сделать веб-приложение с любой функциональностью.
для командной разработки. Фреймворк унифицирует структуру файлов и иерархию классов, а также навязывает единый стиль оформления кода.
Для чего фреймворки не очень подходят:
для несложных типовых сайтов.
для использования какого-либо отдельного компонента фреймворка.
Рассмотрим фреймворк на примере фреймворкаPHPixie.
PHPixie - новый фреймворк, созданный в 2012, целью было создание высокопроизводительного фреймворка для read-only веб-сайтов. PHPixie также следует парадигме HMVC, как и FuelPHP. Компоненты PHPixie на 100% протестированы, и могут работать вне фреймворка.
В 2013 году вышла третья версия PHP-фреймворка Phpixie.
Изменения, прошедшие с фреймворком:
Следование стандартам PSR-2 и PSR-4
Поддержка PSR-7 запросов и библиотека для удобной работы с ними
Шаблонизатор использующий простой PHP, но с поддержкой наследования и блоков как у Twig. Позволяющий легко добавлять свои расширения и другие форматы, например, HAML итд.
ORM который прост в использовании как ActiveRecord, но при этом разбивающий логику запросов, сущностей и репозиториев отдельно. Поддерживающий связи с коллекциями MongoDB и оптимизацию запросов над многими сущностями одновременно (например, можно связать несколько статей с несколькими тэгами одним запросом)
Подход с процессорами вместо привычных контроллеров позволяет создать произвольную архитектуру.
Компонент конфигураций позволяющий разбивать настройки по в глубину по папкам (например ключ languages.en.plural.mouse может обратится к ключу plural.mouse в файле languages/en.php)
Система бандлов позволяющая легко использовать один код в нескольких проектах и делится ним с другими пользователями. Бандлы устанавливаются через композер как любая другая библиотека.
PHPixie является хорошо продуманной структурой PHP, которая кодируется вокруг архитектуры MVC.
Если оперировать понятиями высокого уровня, архитектурный шаблон MVC означает, что приложение MVC будет разделено, по крайней мере, на три части:
Модели. Содержат или представляют данные, с которыми работают пользователи. Они могут быть простыми моделями представлений, которые только представляют данные, передаваемые между представлениями и контроллерами; или же они могут быть моделями предметной области, которые содержат бизнес-данные, а также операции, преобразования и правила для манипулирования этими данными.
Представления. Применяются для визуализации некоторой части модели в виде пользовательского интерфейса.
Контроллеры. Обрабатывают поступающие запросы, выполняют операции с моделью и выбирают представления для визуализации пользователю.
На рис.1.1. изображена диаграмма структуры MVC.
Рис. 1.1. Диаграмма структуры MVC
Если рассматривать приложение в призме бизнес-логики, то можно выделить три уровня на которых строится приложение:
Уровень представления. Данный уровень отвечает за отображение данных, обеспечение обратной связи с пользователем, сбор пользовательской информации, которая передается в уровень бизнес-логики для обработки.
Бизнес-уровень. Бизнес-уровень или, если говорить проще, уровень приложения, обеспечивает логику взаимодействия представления и данных. В MVC бизнес-уровень реализует структуру модели.
Уровень данных. Уровень данных отвечает за получение, передачу и сохранение данных в файле, базе данных, службе или XML.
На рис.1.3. изображена диаграмма структуры MVC через призму бизнес-логики.
Рис. 1.1. Диаграмма структуры MVC через призму бизнес-логики
Как и Symfony, PHPixie состоит из двух частей: библиотеки компонентов и базового проекта, но в случае PHPixie базовый проект более тонкий и состоит всего из нескольких файлов. Именно для этого важно понимать, что и как происходит в системе.
На рис 1.3. изображена диаграмма обработки запроса.
Рис. 1.1. Диаграмма обработки запроса
Главные особенности PHPixie:
Скорость работы. PHPixie - легкий движок. Его создатели старались не использовать шаблоны без крайней необходимости, что позволило существенно снизить нагрузку на сервер.
Документация. PHPixie имеет полную документацию и удобно реализованное API.
Скорость разработки. Фреймворк предлагает все необходимое, чтобы избежать написание однотипного кода, например, при работе с базами данных.
Как и у всех фреймворков у PHPixie есть свои преимущества и недостатки.
Преимущества:
Относительно новый фреймворк
Фреймворк, с которым просто начать работать
Документация содержит примеры использования кода
Хорошая система маршрутизации
Возможность быстро компилировать код
Является HMVC-ориентированным
Недостатки:
Небольшое количество модулей
Нет поддержки компонентов, которые были созданы независимо от зависимых объектов
Разработка структуры web-сайта является одним из ключевых моментов его создания, который в большой степени определяет эффективность его функционирования в будущем. С технической точки зрения структура сайта – это не что иное, как все его страницы, расположенные в порядке их значимости для пользователей, то есть иерархии.
Разрабатывая структуру для будущего сайта, очень важно учитывать то, что сегодня выигрывают, прежде всего, те интернет-ресурсы, которые могут обеспечить своим пользователям быстрый доступ к любой информации, находящейся на их страницах.
Структура сайта «План тренировок»:
Главная страница (с регистрацией или входом уже зарегистрированного пользователя);
Добавление спортсмена (а также редактирование и удаление данных);
Тренеры (вывод таблицы всех тренеров клуба);
Планы тренировок (планы, индивидуально составленные для определенного спортсмена)
Для создания сайта помимо фреймворкаPHPixie, были использованы следующие программы:
Notepad++ -это бесплатный текстовый редактор notepad с открытым исходным кодом, а это означает что программа является свободным программным обеспечением и вы можете его распространять и/или модифицировать в соответствии с условиями лицензии GNU General Public License;
XAMPP - кроссплатформенная сборка веб-сервера (развитие LAMP),содержащая Apache,MySQL, интерпретатор скриптов PHP, язык программирования Perl и большое количество дополнительных библиотек, позволяющих запустить полноценный веб-сервер;
Composer - это пакетный менеджер уровня приложений для языка программирования PHP, который предоставляет средства по управлению зависимостями в PHP-приложении.
ERwin - CASE-средство для проектирования и документированиябаз данных, которое позволяет создавать, документировать и сопровождать базы данных, хранилища и витрины данных;
phpMyAdmin - это приложение написанное на PHP и обеспечивающее полноценную, в том числе удаленную, работу с базами данных MySQL через браузер.
Процесс проектирования БД представляет собой последовательность переходов от неформального словесного описания информационной структуры предметной области к формализованному описанию объектов предметной области в терминах некоторой модели. В общем случае можно выделить следующие этапы проектирования:
Системный анализ и словесное описание информационных объектов предметной области.
Проектирование инфологической модели предметной области - частично формализованное описание объектов предметной области в терминах некоторой семантической модели, например, в терминах Е-модели.
Даталогическое или логическое проектирование БД, то есть описание БД в терминах принятой диалогической модели данных.
Физическое проектирование БД, то есть выбор эффективного размещения БД на внешних носителях для обеспечения наиболее эффективной работы приложения.
Для создания и администрирования базы данных web-сайта была выбрана СУБД MySQL. Администрирование происходит с помощью приложения phpMyAdmin, которое является решением для малых и средних приложений. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.
СУБД MySQL взаимодействует с выбранным web-сервером Apache и использует язык запросов SQL. В базе данных будет храниться следующая информация: планы, тренеры и спортсмены. На рис. 2.1. изображена логическая модель базы данных.
Рис. 2.1. Логическая модель базы данных
На рис. 2.2. изображена физическая модель базы данных.
Рис. 2.2. Физическая модель базы данных
2.3 Установка и настройка фреймворкаСначала создаем скелет проекта используя Composer. На листинге 1.1. представлен код для создания проекта.
Листинг 1.1. Создание проекта с помощью Composer
phpcomposer.pharcreate-projectphpixie/projectyour_project_folder3.*-dev
Так как проект реализован на Windows необходимо создать ярлык /web/bundles/app указывающий на /bundles/app/web. Протестировать созданный проект можно перейдя по ссылке «http://local.local».
PHPixie поддерживает систему бандлов (bundle), как например делает Symfony2. То есть сайт можно разбить на логические части, которые потом легко переносить в другие проекты и делится через Composer. Например, аутентификация пользователей может быть создана как отдельный бандл со своими шаблонами, стилями и изображениями, а затем использована на нескольких проектах. Бандлы «монтируются» в проект как например в Linux диски монтируются в файловою систему.
По началу проект создается с единым бандлом 'app' в '/bundles/app'. В его директории будет происходить весь процесс создания проекта.
Чтобы настроить подключение к базе данных, необходимо отредактировать файл «database.php» в каталоге «Config». Редактирование представлено влистенге 1.2.
Листинг 1.2. Подключение к БД
// assets/config/database.php
return array(
'default' => array(
'driver' => 'pdo',
'connection' => 'mysql:host=localhost;dbname=quickstart',
'user' => 'pixie',
'password' => 'pixie'
PHPixie поддерживает не только реляционные базы данных, но и «MongoDB». Вы можете даже описать связи (one-to-one, one-to-many, many-to-many) между реляционными таблицами и коллекциями MongoDB и работать с ними используя тот же синтаксис. На данный момент никакой другой PHP ORM не поддерживает такого уровня интеграции.
2.4 Создание сайтаПривычная концепция MVC Контроллеров сильно расширена в PHPixie, она теперь поддерживает бесконечную вложенность и произвольную архитектуру. Идея в том, что «контроллер» с точки зрения фреймворка есть только один. Но он может, например, делегировать свои функции «субконтроллерам». Интерфейс процессора (контроллер) состоит всего из одного метода «process($request)». Это позволяет создать несколько базовых классов процессоров, которые по-разному обрабатывают запросы. В PHPixie есть стандартный «Greet»процессор, который показывает приветствие после установки фреймворка.
Далее создаем новый процессор «Quickstart», для проекта. На листинге 1.4. представлен код создания процессора.
Листинг 1.4. Создание процессора «Quickstart»
/ bundles/app/src/Project/App/HTTPProcessors/Quickstart.php
namespace ProjectAppHTTPProcessors;
use PHPixieHTTPRequest;
// Расширяем класс который действует как привычный контроллер
classQuickstart extends PHPixieDefaultBundleProcessorHTTPActions{
/**
* Builder будет использоваться повсюду
* чтобы достукаться в разные части фреймворка
* @var ProjectAppBuilder
*/
protected $builder;
public function __construct($builder) {
$this->builder = $builder;}
// Дефолтноедействие
public function defaultAction(Request $request){
return "Quickstart tutorial";}
//Местодляметодов}
Теперь процессор «Quickstart» необходимо прописать в главном процессоре бандла. По дефолту он настроен так чтобы передавать запрос к процессору, указанному в параметрах роутинга. Для каждого контроллера можно добавить метод-строитель, что позволяет называть классы как нравится и передавать разные параметры через конструктор. На листинге 1.5. представлен код добавления процессора «Quickstart» в главный процессор бандла.
Листинг 1.5. Добавление процессора «Quickstart»
// bundles/app/src/Project/App/HTTPProcessors.php
protected function buildQuickstartProcessor(){
return new HTTPProcessorsQuickstart(
$this->builder );}
Далее необходимо создать модели необходимые для проекта. Как правило, модели обрабатывают операций, такие как извлечение данных из базы данных. PHPixie делает эти операций с использованием слоя ORM, поэтому нет необходимости писать запросы к базе данных. На листинге 1.3. представлено использование ORM доступа к данным из таблицы«trener».
Листинг 1.3.Добавление действие ORM в процессор
// bundles/app/src/Project/App/HTTPProcessors/Quickstart.php
public function ormAction(Request $request){
$orm = $this->builder->components->orm();
$trener = $orm->query('trener')->find();
return $trener->asArray(true); }
Создание, изменение и удаление сущностей в PHPixie, осуществляется с помощью следующих методов:
create() – создание сущности;
save() – изменение и сохранение;
delete() – удаление.
На листинге 1.7. показано использование методов.
Листинг 1.7. Методы для работы с базой данных
$orm = $this->builder->components->orm();
// Созданиесущностичерезеерепозиторий
$projectRepository = $orm->repository('trenert');
$trener = $trenerRepository->create();
// илибыстрыйподход
$trener = $orm->createEntity('trener');
// Изменениеисохранение
$trener->name = 'ИвановДмитрийСергеевич';
$trener->save();
// Удалениетренера
$trener->delete();
Часто необходимо создавать ссылки типа «/quickstart/view/4» включающие id или имя страницы или пользователя.Для этого сначала создаетсядействие в процессоре представленное в листинге 1.8.
Листинг 1.8. Создание ссылки
// bundles/app/src/Project/App/HTTPProcessors/Quickstart.php
public function viewAction($request){
//Выведемпараметр 'id'
return $request->attributes()->get('id');
}
}
А затем добавить правило с этим параметром в «config». Ввод и вывод информации осуществляется с помощью методов, представленных в листинге 1.9.
Листинг 1.9. – Ввод и вывод информации
//$_GET['name']
$request->query()->get('name');
//$_POST['name']
$request->data()->get('name');
//Параметрыроутинга
$request->attributes()->get('name');
Шаблонизатор PHPixie поддерживает наследование шаблонов, блоки и возможность легко добавлять свои расширения и даже форматы.По умолчанию стандартный бандл подгружает шаблоны из папки «bundles/app/assets/templates».
В ней уже лежат два файла которые использовались стандартным процессором «Greet».
2.5 Тестирование сайтаПри переходе по ссылки «http://localhost.local»пользователь попадает на главную страницу, на которой находится форма входа и регистрации новых пользователей.
На рис. 2.3. представлена форма входа на сайт.
Рис 2.3. Форма входа на сайт
На рис. 2.4. представлена форма регистрации на сайте.
Рис 2.4. Форма регистрации
Так же на сайте представлены следующие возможности добавление, редактирование и удаление. На рис. 2.5. представлен вывод данных из базы данных, таблица «trener».
Рис 2.5. Вывод данных из БД
Реализация добавления происходит с помощью формы представленной на рис. 2.6.
Рис 2.6. Форма добавления
На рис. 2.7. представлен результат добавления.
Рис 2.7. Результат добавления
На рис. 2.8. представлен результат удаления тренера с номером 1003.
Рис 2.8. Результат удаления
На рис. 2.9. представлена реализация поиска по полю фамилия.
Рис 2.9. Результат поиска
Для редактирования необходимо выбрать тренера и нажать кнопку. На рис.2.10. изображена форма редактирования.
Рис 2.10. Форма редактирования
На рис. 2.11. представлен результат редактирования тренера с номером 1002.
Рис. 2.11 Результат редактированияPHPixie - небольшой php фреймворк, построенный с использованием MVC. Благодаря простоте и надежности обеспечивает хороши фундамент для создания разнообразных приложений, ориентированных в сторону «web».
При разработке проекта при помощи фреймворка PHPixie были выявления его преимущества:
Скорость работы. PHPixie - легкий движок. Его создатели старались не использовать шаблоны без крайней необходимости, что позволило существенно снизить нагрузку на сервер.
Документация. PHPixie имеет полную документацию и удобно реализованное API.
Скорость разработки. Фреймворк предлагает все необходимое, чтобы избежать написание однотипного кода, например, при работе с базами данных.