«Едва ли не главнейшей функцией менеджера программного проекта должно быть воспитание позиции заботы об общей системе, ориентировки на пользователя.»

Фредерик Брукс «Мифический человеко-месяц или Как создаются программные системы».

Использование шаблонизатора при формировании представления (view) в контроллере

При формирования представления, по моему мнению, удобно использовать шаблонизаторы. У них есть много удобных и полезных возможностей, например, наследование шаблонов, фильтрация, функции, виджеты, переопределение блоков и так далее. Два из рассматриваемых нами фреймворков, а именно: Symfony и Laravel для формирования представлений предоставляют шаблонизаторы «из коробки», а вот Yii по умолчанию для этих целей использует чистый php, хотя не запрещает нам подключить и использовать в рамках фреймворка подходящий шаблонизатор.

Рассмотрим сначала как формируются шаблоны в Yii, а затем перейдём к рассмотрению вопроса использования в представлениях шаблонизаторов в рамках фреймворков Symfony и Laravel. Читать далее «Использование шаблонизатора при формировании представления (view) в контроллере»

Использование ORM для работы с БД

Перейдём к рассмотрению вопроса работы с базой данных. В настоящее время нет необходимости писать низкоуровневые SQL-CRUD-запросы для работы с сущностями базы данных, для этих целей созданы ORM (Object-Relational Mapping) обёртки, которые позволяют делать это легко и удобно в стиле ООП. Хотя все рассматриваемые нами фреймворки (а именно: Yii, Symfony и Laravel) не ограничивают нас в средствах работы с базой данных (то есть, если у нас сложная структура БД или нам нравится на каждое действие писать чистый SQL, то мы можем это делать беспрепятственно), однако имеют в своих арсеналах конкретные реализации ORM, которые заметно облегчают взаимодействие с БД. Читать далее «Использование ORM для работы с БД»

FunnyApp: разбираемся с роутингом

После того, как мы сделали обзор конфигурирования приложения, думаю будет логично рассмотреть, а как же устроен роутинг (routing) в каждом из фреймворков. Для этого предлагаю создать несколько страниц:

  • список организаций
  • список пользователей конкретной организации
  • подробная информация о пользователе
  • список категорий портфолио
  • список работ конкретной категории портфолио

Читать далее «FunnyApp: разбираемся с роутингом»

Проектируем базу данных

Для проектирования базы данных воспользуемся online инструментом: https://www.draw.io/

На мой взгляд очень удобный инструмент с богатым функционалом для создания диаграмм и схем. Бесплатный.

Как показала практика, лучше сначала всё продумать на бумажке, а затем готовую схему перенести в draw.io, так как в процессе осмысления структуры происходят множественные поправки, и на бумаге это сделать быстрее и легче.

Первоначальная структура базы данных получилась такой:

ERP схема базы данных FunnyApp

В процессе развития приложения, возможно, структура будет модифицироваться и расширяться.

Концепция приложения

Смысл нашего будущего приложения FunnyApp достаточно простой. Список организаций, список пользователей, портфолио пользователей, категории работ, галерея работ пользователей. Поскольку наша задача не создание какого-то уникального продукта, а изучение фреймворков и их анализ и сравнение, то особого упора на смысловую составляющую приложения не делаем. Сущности приложения и задачи, которые предстоит выполнить, достаточное типичные.

Пользовательская часть приложения будет выполнена с помощью стандартных возможностей шаблонизации, админку будем писать в виде одностраничного приложения (single page application) с использованием JavaScript фреймворков. Это приложение будет общаться с сервером через API.

P.S. В процессе написания заметок ко мне пришло понимание, что грамотное формулирование и изложение своих мыслей — это нелёгкий труд.

Разворачиваем проект на Laravel 5.4

Пришло время развернуть основу для нашего проекта на Laravel 5.4.

Инструкция по установке:
https://laravel.com/docs/5.4/installation

Устанавливаем через композер.

После установки рекомендуется проверить, что папки storage и bootstrap/cache доступны для записи веб-серверу.

В качестве корневой папки для хоста устанавливаем папку public.

Репозиторий проекта: https://github.com/loonin/laravel-funnyapp

URL приложения: http://laravel.funnyapp.lynin.ru/

Разворачиваем проект на Symfony 3.2

Теперь давайте займёмся разворачиванием каркаса Symfony для нашего приложения FunnyApp.  Последняя стабильная версия фреймворка на данный момент 3.2.4.

Инструкция по установке:
http://symfony.com/doc/current/setup.html

Установка прошла без проблем. В качестве корневой папки для хоста устанавливаем папку web.

Репозиторий проекта: https://github.com/loonin/symfony-funnyapp

URL приложения: http://symfony.funnyapp.lynin.ru/

Разворачиваем проект на Yii 2.0

Начинаем разработку FunnyApp с Yii фреймворка. Данный фреймворк даёт возможность начать разработку с базового шаблона (basic application template), либо с продвинутого (advanced application template). В чём разница? Advanced шаблон ориентирует нас на разделение в приложении его пользовательской части (папка frontend) от бек-офиса (папка backend). Также мы можем выделить в отдельное подприложение будущее API. Таким образом пользовательская часть site.com будет ссылаться на папку frontend/web/, а админка будет на поддомене admin.site.com и будет ссылаться на backend/web/.

Страница с инструкцией по скачиванию фреймворка:
http://www.yiiframework.com/download/

Более развёрнуто тут:
http://www.yiiframework.com/doc-2.0/guide-start-installation.html

Последняя версия Yii 2.0.11, выпущенная 1 февраля 2017 требует PHP 5.4, как минимальную версию, при этом заявлена полная совместимость с PHP 7.x.

При установке Yii через композер возникла небольшая проблема:
Could not fetch https://api.github.com/repos/jquery/jquery-dist/commits/1472290917f17af05e98007136096784f9051fab, please create a GitHub OAuth token to go over the API rate limit.
Решил с помощью добавления «Personal access token» в настройках персонального аккаунта на гитхабе. Подробнее о проблеме тут:
https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens

После установки нужно не забыть выполнить в корневой папке приложения команду:

php init

И выбрать окружение Development. Данная команда создаёт необходимые файлы для старта (например, frontend/web/index.php).

В качестве корневой папки для хоста пользовательской части устанавливаем папку frontend/web, а для хоста админ-панели устанавливаем backend/web.

Репозиторий проекта: https://github.com/loonin/yii-funnyapp

Пользовательская часть: http://yii.funnyapp.lynin.ru

Админ-часть: http://admin.yii.funnyapp.lynin.ru