Symfony уже обновилась до 4.1, популярные бандлы добавляют совместимость, а вот документацию обновлять не спешат. Когда я впервые пыталась установить FOSUserBundle, серьёзно запуталась. Для профессионалов это, может, и очевидно, но мне стоило разобраться сначала, как изменилась структура папок и куда теперь смотреть.
Установка
Предполагается, что установить Symfony и нужные компоненты вы уже сможете. Требуются Doctrine, Annotations, SwiftMailer, Translation и Twig – всё это уже есть в вашем проекте, если создали его как symfony/website-skeleton
, и всё это нужно добавить, если использовали symfony/skeleton
. И ещё нужны настроенные в файле .env доступ к базе данных и mailer.
Устанавливается FOSUserBundle просто, но шаги установки используют не те файлы, которые сейчас указаны в документации. Пройдёмся по порядку, указываю не полностью инструкцию – её найдёте в документации – а правильные папки и файлы в Symfony 4.
Обработка шаблонов
Иногда FOSUserBundle выдаёт ошибку при установке, если в файле config/packages/framework.yaml
не указан обработчик шаблонов.
Просто добавить туда templating: engines
1 | framework: |
Создание класса User
В папке src/Entity
security.yaml
Теперь в config/packages/security.yaml
Базовая настройка
Совсем рядом: config/packages/fos_user.yaml
В примере у меня уже изменены формы регистрации и редактирования профиля, включено подтверждение регистрации по e-mail.
1 | # config/packages/fos_user.yaml |
Прописать адреса
В файле config/routes/fos_user.yaml
. Если этого файла нет, создать его.
1 | # config/routes/fos_user.yaml |
В остальном инструкция по установке в документации актуальна.
Замена стандартных сообщений и шаблонов
Переводы
Чтобы все надписи отображались корректно (на языке, который по умолчанию проставлен в config/services.yaml
), должны быть включены переводы в файле config/packages/translation.yaml
. Обычно всё там настроено по умолчанию:
1 | # config/packages/translation.yaml |
Для того, чтобы изменить сообщения, нужно в папке translations
создать файл FOSUserBundle.ru.yml
(например, для русского языка). Исходный файл найдёте в vendor/friendsofsymfony/user-bundle/Resources/translations/
, там можно структуру посмотреть.
Но после изменения файлов переводы не обновляются в отображении страниц, пока не почистить кэш:
1 | bin/console cache:clear |
Шаблоны
Казалось, что это самое сложное и запутанное, а между тем подсказки охотно выдаёт Profiler.
Итак, для замены шаблонов нужно создать папку templates/bundles/FOSUserBundle/
, а в ней структура должна быть как в vendor/friendsofsymfony/user-bundle/Resources/views/
.
Всё заменять совсем не нужно. Например, в рабочем проекте у меня лежат только эти файлы:
1 | . |
Остальное просто ссылается на тот же самый layout.html.twig. За что и люблю Twig.
На этом всё.
В конфигурации выше был ещё пример, как указывать перезаписанные формы, но файл config/services.yaml
остался на месте.