Создание галереи изображений с помощью Symfony Flex: настройка

Эта статья будет частью серии материалов о создании галереи с несколькими картинками для оценки производительности и оптимизации.(Смотрите репозиторий здесь). В данной части мы выполним базовую настройку проекта.

В данной статье будут рассмотрены параметр и организация файлов для нашего проекта на Symfony Flex. Я также предоставлю пару советов, приемов и вспомогательных скриптов, которые ускорят разработку.

Что мы создаем?

В данной серии статей мы будем создавать простой блог с галереей картинок. На нем посетители смогут зарегистрироваться, загружать картинки и создавать простые общедоступные галереи картинок с описаниями, написанными в формате Markdown.

Мы будем использовать новые Symfony Flex и Homestead. А также шаблонизатор Twig, формы Symfony и Doctrine ORM с UUID в виде первичных ключей.

Объекты и маршруты будут использовать аннотации. Мы реализуем простую аутентификацию по электронной почте и паролю. Далее подготовим информацию для заполнения базы данных.

Начало работы с приложением

Чтобы работать с примером, который мы подготовили, сделайте следующее:

  • Создайте пустую базу данных с названием blog.
  • Клонируйте репозиторий проекта с GitHub.
  • Запустите composer install.
  • Обновите файл .env в корневом каталоге проекта, указав правильную строку подключения к базе данных(то есть обновите учетные данные).
  • Запустите скрипт инициализации базы данных ./bin/refreshDb.sh и подождите, пока он создаст пару галерей картинок.
  • Откройте приложение в браузере и наслаждайтесь.

После выполнения bin/refreshDb.sh вы должны увидеть домашнюю страницу веб-сайта.

Создание галереи картинок при помощи Symfony Flex: параметр

Вы можете без проблем войти в приложение при помощи логина user1@mailinator.com и пароля 123456. Изучите класс фикстуры(тестовых данных) LoadUserData для получения информации о сгенерированных посетителях.

Начинаем с нуля

В этом разделе описывается, как создать новый проект с нуля. Вы можете посмотреть пример кода приложения.

После создания нового проекта на основе symfony/skeleton при помощи команды

composer create-project "symfony/skeleton:^3.3" multi-user-gallery-blog

… мы можем установить минимальный уровень стабильности для dev-окружения:

composer config minimum-stability dev

Далее нам понадобятся дополнительные пакеты. На некоторые из них мы ссылаемся через их псевдонимы – новый функционал, доступный в Flex:

composer req annotations security orm template asset validator ramsey/uuid-doctrine

Зависимости, используемые только в среде разработки, подключаются с флагом --dev:

 composer req --dev fzaninotto/faker doctrine/Doctrine-Fixtures-Bundle

Flex выполняет за нас много работы. Так что большинство библиотек зарегистрировано и настроено с настройками по умолчанию.

Зайдите в каталог config. Здесь в файле composer.json можно проверить все зависимости, используемые в проекте.

Маршруты определяются аннотациями, так что следующие данные будут автоматом добавлены в config/routes.yaml:

controllers: resource:../src/Controller/ type: annotation

База данных, скрипты и фикстуры

Настройте переменную среды DATABASE_URL, чтобы установить рабочее соединение с базой данных. При использовании Homestead Improved вы приобретаете настроенную базу данных с именем homestead, логином паролем( homestead / secret). Схема базы данных может быть сгенерирована из существующих объектов:

./bin/console doctrine:schema:create

Если это не работает, попробуйте запустить консоль, вызвав бинарный файл PHP. К примеру, так:

php bin/console doctrine:schema:create

Для удаления базы данных запустите приведенную ниже команду:

./bin/console doctrine:schema:drop --full-database --force

Создавайте тестовые данные

Я считаю Doctrine Fixture Bundle отличным инструментом для обработки данных. С его помощью вы можете контролировать порядок записей, делиться объектами(через ссылки) между скриптами и приобретать доступ к контейнеру сервиса.

Стандартная конфигурация сервисов Symfony не разрешает публичный доступ к сервисам. В виде рекомендованной практики предлагается включить все зависимости.

Нам понадобятся некоторые службы для скриптов заполнения БД. Так что я сделаю все службы AppServices общедоступными, добавив приведенный ниже программный код в config/services.yaml:

AppService: resource: '../src/Service/*' public: true

Я также использую Faker для получения случайных, но реалистичных данных(имен, предложений, текстов, картинок, адресов и т. д.). Взгляните на скрипт для заполнения галерей случайными картинками.

Обычно я объединяю команды для удаления схемы БД, создания новой схемы БД, загрузки фикстур данных и иных повторяющихся задач в единый скрипт оболочки bin/refreshDb.sh. Это может запросто сгенерировать схему и загрузить случайные данные:

# Удаление схемы./bin/console doctrine:schema:drop --full-database --force# Создание схемы./bin/console doctrine:schema:create# Загрузка фикстур./bin/console doctrine:fixtures:load -n --fixtures src/DataFixtures/ORM# Установка ресурсов./bin/console assets:install --symlink# Очистка кеша./bin/console cache:clear

Можно утверждать, что случайно сгенерированные данные не могут воспроизводить различные крайние случаи. Необходимо обеспечить, чтобы все крайние случаи охватывались тестовыми данными.

Контроллеры, шаблоны и службы

Классы контроллеров расположены в каталоге srcController. Они не расширяют существующий класс Controller, предоставляемый FrameworkBundle. Все зависимости включаются через конструкторы. Это делает код менее связанным и простым для тестирования.

В новой структуре каталогов Symfony шаблоны расположены в templates. Я создал основной шаблон base.html.twig, который определяет базовую структуру HTML и ссылается на внешние ресурсы.

Иные шаблоны расширяют и переопределяют его блоки(к примеру, таблицы стилей, тело, заголовок, содержимое, JavaScript).

На локальные ресурсы мы ссылаемся при помощи возможности Twig asset. Иные шаблоны расположены в подкаталогах внутри каталога src/templates.

Службы автоматически регистрируются и настраиваются по умолчанию в конфигурации Symfony. Так что не необходимо вручную настраивать расширения Twig с фильтрами для поддержки Markdown и генерировать URL-адреса для объектов картинки, расположенных в src/Twig.

Управление исходным кодом / Контроль версий

Symfony Flex управляет проектом .gitignore по умолчанию, добавляя известные файлы и папки пакета в список игнорируемых. К примеру, Flex добавил бы в список игнорирования для symfony/framework-bundle следующие файлы:

.env/public/bundles//var//vendor/

Мы будем хранить загруженные файлы в каталоге var/uploads, так что необходимо создать его. Вместо того чтобы делать это вручную можно без труда использовать специальную команду для события post-install-cmd в разделе скриптов composer.json . И далее указать Composer запускать ее для нас (например, "mkdir -p var/uploads" ).

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

Иные советы и устранение неполадок

  • Проверьте файл Homestead.yaml на наличие переменных среды. Если у вас есть переменная APP_ENV, Symfony не будет загружать ее из файла .env. Лучше всего для обеспечения безопасности закомментировать раздел Homestead.yaml APP_ENV.
  • Очистка кэша на компьютере с Vagrant может завершиться сбоем из-за прав доступа. Можно без труда просто запустить очистку кеша вручную при помощи команды sudo rm -rf var/cache/*.

Заключение

В данной статье мы настроили проект с объектами, контроллерами, шаблонами и вспомогательными скриптами. База данных заполнена сгенерированным контентом. Так что посетители могут регистрироваться и создавать ваши галереи.

В следующей статье мы покажем, как заполнить базу более объемным набором данных для проверки производительности приложения. А так же, как изменить простой набор тестов и CI на основе Docker.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *