Как реализовать пользовательскую систему с FOSUserBundle в Symfony> 2.8

Создать пользовательскую систему с Symfony 2 или 3 «не» трудная задача. На главной странице вы найдете краткое описание того, как создать пользовательский поставщик для вашего приложения. Вот.

Но что может быть лучше, чем то, что уже реализовано и используется многими разработчиками Symfony и поддерживается в настоящее время в Github? возможно, создайте своего собственного провайдера пользователей, потому что это самоудовлетворительно для вашего знания и вашего дево-эго! но вы будете тратить драгоценное время на разработку чего-то, что вы могли бы установить менее чем за 30 минут, и предоставили бы те же функции, которые вам нужно было создать с самого начала.

Почему FOSUserBundle?

В FOSUserBundle добавлена ​​поддержка пользовательской системы на базе базы данных в Symfony2. Он предоставляет гибкую структуру для управления пользователями, которая направлена ​​на решение общих задач, таких как регистрация пользователей и поиск пароля.

Особенности включают в себя:

  • Пользователи могут быть сохранены с помощью Doctrine ORM, MongoDB / CouchDB ODM или Propel (в этом случае мы будем использовать Doctrine)
  • Поддержка регистрации, с дополнительным подтверждением по электронной почте
  • Поддержка сброса пароля

В этой статье вы узнаете, как легко настроить FOSUserBundle в вашем проекте (с классами пользователей и групп), и вы не ошибетесь в этой задаче, это обещание.

1. Создайте пользовательский пакет (необязательно)

Создайте новый пакет в /src папка вашего проекта Symfony с помощью php bin/console generate:bundle Команда в Symfony. Суть этого заключается в том, чтобы изолировать администрирование пользователей в одном пакете. Структура пакета не должна быть особенной, нужно просто зарегистрироваться в ядре и все будет работать правильно.

Заметка

Если вы не хотите создавать дополнительный пакет для пользовательской системы, просто выполните следующие шаги в существующей связке.

2. Создайте User.php и Group.php

Цель этого пакета — сохранить некоторый класс User в базе данных. Ваша первая задача — создать Пользовательский класс для вашего приложения. Этот класс может выглядеть и действовать так, как вы хотите: добавьте любые дополнительные свойства (поля для пользовательской таблицы) или методы, которые вы можете найти полезными.

Если вы решили создать дополнительный пакет, вероятно, он не будет иметь Entity папка внутри, поэтому вам нужно создать новую папку с именем Entity, Внутри Entity папка в комплекте, создать 2 файла User.php а также Group.php,

User.php

Класс User должен иметь следующий код внутри:

Group.php

Класс Group должен иметь следующий код внутри:

Наконец, ваш пакет должен выглядеть примерно так:

Пример реализации FosUserBundle

userBundle был создан непосредственно в /src папка проекта Symfony, поэтому пространство имен классов namespace userBundle\Entity;

3. Измените поставщика по умолчанию

Теперь, когда ваш класс User существует, вам нужно включить класс FOSUserBundle в качестве поставщика по умолчанию в вашем проекте. Вам нужно добавить конфигурацию в файл config.yml вашего проекта, в ней указывается драйвер вашей базы данных, путь к классу пользователя и группы, как показано в следующем примере, добавить фрагмент в файл config.yml и изменить путь к классам, если вам нужно:

# /app/config.yml
fos_user:
db_driver: orm
firewall_name: main
user_class: userBundle\Entity\User
group:
group_class: userBundle\Entity\Group

Теперь ваш класс будет использоваться в качестве поставщика по умолчанию.

4. Обновите конфигурацию безопасности

Вам нужно изменить security.yml файл вашего проекта и добавьте следующую конфигурацию. Закомментируйте весь существующий контент в этом файле или удалите его и замените его следующим:

# app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN:       ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
# if you are using Symfony < 2.8, use the following config instead:
# csrf_provider: form.csrf_provider
logout:       true
anonymous:    true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }

Не забудьте (в соответствии с версией вашего проекта Symfony) изменить csrf_token_generator свойство в брандмауэрах, если оно не работает в первый раз.

5. Установите FOSUserBundle с композитором

Вы можете спросить себя, почему этот шаг не первый шаг, так как это основной смысл этой статьи? Ну, ответ довольно прост. Практически во всех руководствах первым шагом является установка FOSUserBundle с использованием composer, однако в последних версиях Symfony это приведет к известной ошибке:

Дочерний узел "db_driver" по пути "fos_user" должен быть настроен.

Проблема вызвана только тем, в каком порядке вы выполняете шаги установки. Чтобы продолжить, включите пакет с помощью Composer:

composer require friendsofsymfony/user-bundle "[email protected]"

Или добавьте строку в строку composer.json, а затем выполните composer install:

"require":{
"friendsofsymfony/user-bundle": "[email protected]"
}

Тем не менее, после завершения установки FOSUserBundle, вы, вероятно, столкнетесь с последним исключением:

[Symfony \ Component \ Config \ Exception \ FileLoaderLoadException] Нет расширения, способного загрузить конфигурацию для fos_user

Вы увидите эту ошибку просто потому, что мы не включили пакет в AppKernel.php файл, поэтому вам нужно найти app/AppKernel.php подать и зарегистрировать пакет:

6. Включите маршруты по умолчанию

Структура FOSUserBundle готова, однако без маршрутов в вашем приложении вы не сможете использовать пакет, поэтому нам нужно импортировать маршрутизацию из FOSUserBundle в маршруты вашего приложения. Чтобы включить маршруты по умолчанию (вход, регистрация, выход из системы и т. Д.), Добавьте следующие строки в app/routing.yml файл:

# app/config/routing.yml
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
# IMPORTANT
# Import the following routes only if when you start the project
# those routes are not available :
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile
fos_user_register:
resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
prefix: /register
fos_user_resetting:
resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
prefix: /resetting
fos_user_change_password:
resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
prefix: /profile

7. Обновите схему базы данных

После всех необходимых базовых настроек вам нужно всего лишь обновить базу данных, чтобы создать таблицы, в которые будут вставлены ваши пользователи, с помощью команды symfony:

За Symfony 2.x консоль находится в каталоге приложения:

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

И для Symfony 3.x консоль находится в каталоге bin:

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

Заметка

В случае, если вы получите исключение The child node "from_email" at path "fos_user" must be configured

8. Проверьте вашу пользовательскую систему

Теперь вам нужно проверить, все ли работает, не забудьте сначала очистить кеш. Зарегистрируйте первого пользователя по следующему URL:

http://yourapp/app_dev.php/register

И войдите на:

http://yourapp/app_dev.php/login

Повеселись !

Ссылка на основную публикацию
Adblock
detector