- •Глава 1. Теоретические основы технологий symfony framework 7
- •Глава 2. Создание приложения на основе технологий symfony framework 51
- •Введение
- •Глава 1. Теоретические основы технологий symfony framework
- •1.1. История развития веб-технологий и существующие проблемы
- •1.2. Обзор типовых решений в области веб-разработки
- •1.3. Модель mvc и ооп в веб-программировании
- •1.4. Назначение и установка Symfony Framework
- •1.5. Структура Symfony Framework
- •1.5.1. Конфигурация
- •1.5.2. Бандлы
- •1.5.3. Сущности Doctrine
- •1.5.4. Маршрутизация
- •1.5.5. Контроллеры
- •1.5.6. Шаблонизатор Twig
- •1.5.7. Генерация форм и валидация
- •1.5.8. Безопасность
- •1.5.9. Сервисы
- •1.5.10. Консольные команды
- •1.5.11. Механизмы тестирования
- •1.6. Развертывание приложения Symfony
- •Глава 2. Создание приложения на основе технологий symfony framework
- •2.1. Постановка задачи
- •2.2. Настройка develop-сервера и установка Symfony
- •2.3. Установка дополнительных библиотек через composer
- •2.4. Вёрстка шаблона, npm, webpack
- •2.5. Генерация сущностей и форм
- •2.6. Определение маршрутов и контроллеров
- •2.7. Создание и настройка сервисов
- •2.8. Написание консольных команд и заданий cron
- •2.9. Тестирование
- •2.10. Перенос проекта на production-сервер
- •Заключение
- •Список литературы
- •Приложения
1.2. Обзор типовых решений в области веб-разработки
Операционная система Ubuntu 16.04 (рис. 1)
Является одной из самых популярных операционных систем семейства Linux. Выпускается в редакции Server и Desktop. Обладает предустановленным сервером Apache2, PHP7.0, mysql и ещё целым рядом программ, предназначенных для веб-разработки. Все популярные инструменты и технологии как правило создаются конкретно для пользователей данной операционной системы.
Обладает огромными возможностями для расширяемости, кастомизации, а также набором репозиториев, приложений и библиотек, удовлетворяющих почти любые нужды при разработке.
Для максимально удобного использования Ubuntu необходимы знания консольных команд, в которой происходит большинство взаимодействий с системой. Нет необходимости постоянного использования браузера и поиска нужных программ, скачивания их, настройки и т.д. Все эти действия заменят ввод пары команд в консоли.
Система является защищенной к вирусным атакам, обладает встроенными инструментами шифрования, распространяется бесплатно, обладает большим сообществом, регулярно обновляется [4].
Рис. 1. Рабочий стол Ubuntu 16.04
Язык программирования PHP 7
Является намного быстрее по сравнению со своим предшественником PHP5.6 согласно источнику html5.by (рис. 2)
Рис. 2. Тест производительности PHP7 при работе различных фреймворков
В PHP7 были убраны многие устаревшие функции, введена поддержка строгой типизации, добавлены новые методы, операторы, синтаксис кодирования Unicode, групповая декларация use, множество новых возможностей синтаксиса, улучшенная обработка исключений, анонимные функции.
Язык программирования ECMAScript 6
Одним из самых важных нововведений в последних версиях ECMAScript является полноценная поддержка использования классов, несмотря на то, что они, по сути, являются синтаксическим сахаром (конструкцией языка для упрощения реализации программного кода) прототипами [5].
Из остальных значительных нововведений можно выделить поддержку импорта и экспорта модулей, строковые шаблоны, введение нового способа объявления переменных через let и const, а также появление стрелочных функций.
Менеджер пакетов Composer
Composer – это пакетный менеджер для языка PHP. Он упрощает установку каких-либо сторонних библиотек, используемых в проекте, перенос проекта от одного разработчику к другому.
Работа с composer осуществляется через командную строку. При установке какого-либо пакета, располагающегося в репозитории, имеется возможность указания версии. Composer обладает встроенным автозагрузчиком классов, прост в установке и конфигурации [6].
Менеджер пакетов NPM
NPM представляет собой менеджер пакетов, входящий в состав NodeJS. Имеет огромную базу приложений в репозитории, упрощают установку и интеграцию различных js, css и прочих библиотек [7]. Так же, как и с Composer, взаимодействие осуществляется через командную строку, но имеется и возможность использования графических оболочек. Содержимое конфигурационного файл представляет собой json-массив, аналогично таковому в Composer.
Шаблонизатор Twig
Twig является шаблонизатором, написанным на языке PHP. Позволяет жёстко разграничить понятия Controller и Viewer, так как при написании шаблона страницы используется только характерные для Viewer функции и синтаксис, который в свою очередь является более удобным и сокращённым по сравнению с PHP [8].
Twig обладает встроенной системой кеширования страниц, позволяет расширять свой функционал в зависимости от подробностей при разработке проекта путём написания дополнительных классов и методов, является шаблонизатором по умолчанию в Symfony.
У Twig открытый исходный код, имеется русскоязычная документация.
ORM Doctrine
Doctrine создаёт слой абстракций над БД и позволяет связать их с концепциями объектно-ориентированного программирования. Работа с базой данных представляет собой исключительно взаимодействие с объектами. Каждая таблица – объект [9].
Doctrine избавляет программиста от написания дублирующегося кода в виде однотипных SQL-запросов, а синтаксис взаимодействия с объектами абсолютно не зависит от выбранной СУБД, обладает системой защиты от SQL-инъекций, обеспечивает сохранение целостности данных, имеет обширную документацию. При необходимости изменения СУБД код переписывать не нужно.
Система контроля версий Git
Git является системой контроля версий, обладает как и возможностью консольного управления, так и графической оболочкой, интегрирован во множество IDE, имеет высокую производительность [10].
IDE PhpStorm
PhpStorm идеально подходит для работы с Symfony, Drupal, WordPress, Zend Framework, Laravel, Magento, Joomla!, CakePHP, Yii, и другими фреймворками. Он индексирует весь код проекта, поддерживает множество языков, автодополнение, рефакторинг кода, подсветку ошибок, встроенные инструменты для работы с SFTP, консолью, базами данных и т. д. [11].
Для студентов PhpStorm распространяется бесплатно.
Инструмент для сборки фронтенда Webpack
Инструмент для сборки фронтенда, обеспечивающиый объединение различных модулей, минимизацию файлов, использование различных загрузчиков и преобразователей. Обладает гибкими настройками, автоматической пересборкой при изменении, проектирование в зависимости от окружения [12].
CSS-фреймворк Material Design Lite
Позволяет использовать элементы Material Design на сайте. Данный фреймворк не связан ни с каким js-фреймворком и является универсальным. Страницы, разработанные с помощью MDL будет придерживаться современных принципов веб-дизайна, поддерживать мобильные браузеры, будут адаптивны и минималистичны.
MDL включает в себя новые версии управления пользовательским интерфейсом, такие как кнопки, флажки и текстовые поля. Библиотека также включает в себя расширенные и специализированные функции, такие как карты, макеты колонок, ползунки, счетчики, вкладки и многое другое [13].
Язык стилей LESS
Язык существенно расширяет стандартные возможности CSS, добавляет возможность использования переменных, вложенности, примесей, функций, операций. Любой валидный CSS код является валидным и в LESS [14].
PHP-фреймворк Symfony3 (рис. 3)
Один из самых популярных и современных PHP-фреймворков на данный момент. Он использует модель MVC, поддерживает множество различных баз данных, в составе фреймворка поставляется Doctrine, Twig, Composer, а также ряд других библиотек. Весь исходный код фреймворка соответствует стандартам PSR, имеет поддержку PHP7. Symfony имеет собственный хост разработки, подробную документацию по функционалу с подробными примерами. Обновления появляются регулярно с периодичностью в несколько недель [15].
Рис. 3. Панель статистики в Symfony3
БД PostgreSQL
Является объектно-реляционной базой данных, то есть содержит технологии, реализующие объектно-ориентированный подход [16]. Некоторые преимущества PostgreSQL по сравнению с MySQL:
Подзапросы можно писать отдельно, давая им имена.
Большое количество различных типов данных, в том числе возможность добавления пользовательских типов.
Ограничения самой базы данных, обеспечивающие целостность данных. Возможность ограничения по некоторому диапазону, условию и т. д.
Тип json и полноценная работа с ним.
Хранимые процедуры на любых языках.
Репликация работает быстро и консистентно.
При правильной настройке запросы выполняются в разы быстрее.
Строгий режим. В отличии от MySQL, PostrgreSQL не позволит сделать двусмысленный запрос и получить обрезанную строку, случайное число и т. д.
Полнотекстовый поиск.
Последовательности. В MySQL есть только AUTO_INCREMENT на поле таблицы, с итерацией по одному. В PostgreSQL этот механизм живет отдельно от таблицы, что можно использовать для самых разных потребностей, кроме того можно их создавать зацикленными.
