Простой сайт на фреймворке Symfony — есть ли смысл? Часть 1

До сих пор у нас всегда было так: простые сайты, особенно блоги — на WordPress, что-то нестандартное — в зависимости от задачи, но часто на Symfony.

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

Посмотрим, куда нас это приведет.


Оглавление


1. Фронтэнд

Так как у нас самый простой (и дешевый) сайт-визитка, то дизайн покупаем на themeforest. Это самая простая html тема, одобренная заказчиком. WordPress темы мы не рассматриваем, так как есть печальный опыт за бóльшие деньги получения жутко тормозящего нечто, из которого потом несколько дней вручную выпиливать лишние плагины.

Таким образом, на этапе покупки шаблона разницы никакой — и под WordPress, и под Symfony покупаем простой html шаблон.

Пересобираем купленный шаблон под webpack, чтобы можно было без проблем использовать препроцессоры css и новый стандарт js. Webpack Encore от Symfony тут — очень хороший помощник. Все завелось, собралось и работает с полпинка.

Разбираем шаблон на кусочки под twig, верстаем основные страницы. Так как структура сайта и основный контент были получены в качестве ТЗ от заказчика, проблем с контентом не возникает, и это просто прекрасно!

Ура, все готово, работает, можем переходить к бэкэнду 😉

2. Бэкэнд. Установка

Основная наша задача на бэкэнде — создать такую панель администрирования, чтобы клиенту было удобно. Уж точно не менее удобно, чем на вордпрессе.

Клиенту нужны:

  1. Возможность редактирования страниц.
  2. Инструмент для редактирования контактной информации (телефоны, адрес, карта, контактный email).
  3. Инструмент для добавления и редактирования заказчиков для списка заказчиков на главной.
  4. Возможность добавления и редактирования фото в галерее объектов.
  5. Возможность добавления и редактирования фото сертификатов в галерее сертификатов.

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

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

В качестве основы для панели администрирования сайта возьмем Sonata Admin.

2.1. Sonata Admin

Установка самой панели прошла прекрасно, минут за 5 максимум, но нужно еще доставить управление пользователями. Нам же не нужно, чтобы админка была доступна всем и без пароля?

Совершенно пустая админка

2.2. Модуль для управления пользователями

Установка модуля для управления пользователями (sonata-project/user-bundle) прошла поинтереснее. Инструкция тут. Если при установке Sonata Admin автоматически применяются пара рецептов, и ничего дополнительно настраивать не нужно, то тут пришлось все настройки перепроверить и применить вручную. Для справки, версия Symfony — 4.4. Может быть, в последующих версиях что-то исправится, но пока некоторые настройки в инструкции указаны неверно, других — не хватает.

Например, такая ошибка:

The service "fos_user.resetting.controller" has a dependency on a non-existent service "templating".

лечится такой записью в файле «config/packages/framework.yaml»:

framework:
    # ... other stuff ...
    templating:
        engines: ['twig''php']

Также пришлось доставить symfony/swiftmailer-bundle и symfony/acl-bundle.

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

Не забываем в конце создать админа:

php bin/console fos:user:create --super-admin

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

А это окно логина:

2.3. Медиатека

Медиатека в Sonata Admin — это такая прекрасная вещь, которая позволяет закачивать на сайт изображения и другие файлы, создавать из них галереи, а также удобно привязывать эти изображения к сущностям (к статьям, например). А еще мы сможем указать необходимые нам размеры изображений (например, 200×200 для миниатюр), и выводить в шаблонах уже эти уменьшенные изображения.

Пока все перечисленное — повторение функций медиатеки WordPress. А вот чего WordPress «из коробки» не умеет — так это работать с S3.

Инструкция по установке находится тут.

После установки sonata-project/media-bundle, не забываем сгенерировать сущности:

php bin/console sonata:easy-extends:generate --dest=src SonataMediaBundle --namespace_prefix=App

И обновить структуру базы:

php bin/console doctrine:schema:update --force

После этого нужно было внести еще несколько правок в конфиги:

В результате получили отличную админку с медиатекой:

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