Как установить и настроить FOSUserBundle в Symfony 4

С появлением Symfony 4 многое изменилось, большая часть из них навсегда. Однако, когда вы работаете на предприятии, где вы постоянно работаете над одними и теми же вещами (логикой), у вас будет плохое время, чтобы узнать, как эти вещи работают на новых платформах. Это случай Symfony 4, где пользовательская система стала еще проще в реализации. Однако, если вы любите простоту, которую обеспечивает FOSUserBundle, вы можете узнать, что все еще возможно реализовать ее и в Symfony 4.

В этой статье мы покажем вам, как установить традиционный FOSUserBundle в ваш новый проект Symfony 4.

1. Создайте традиционное веб-приложение

Чтобы реализовать FOSUserBundle в проекте на основе Symfony 4, вам нужно будет работать с традиционной версией Symfony для веб-приложения (версия, которая устанавливает необходимые зависимости для создания веб-приложения, например Doctrine, Twig, SwiftMailer, Monolog и т. Д.). Итак, в качестве первого шага создайте свой новый проект Symfony, используя эту версию:

composer create-project symfony/website-skeleton project_name

Это создаст проект, который имеет пару зависимостей, как показано в следующем composer.json файл:

{
"type": "project",
"license": "proprietary",
"require": {
"php": "^7.1.3",
"ext-iconv": "*",
"sensio/framework-extra-bundle": "^5.1",
"symfony/apache-pack": "^1.0",
"symfony/asset": "^4.1",
"symfony/console": "^4.1",
"symfony/expression-language": "^4.1",
"symfony/flex": "^1.0",
"symfony/form": "^4.1",
"symfony/framework-bundle": "^4.1",
"symfony/lts": "^4@dev",
"symfony/monolog-bundle": "^3.1",
"symfony/orm-pack": "*",
"symfony/process": "^4.1",
"symfony/security-bundle": "^4.1",
"symfony/serializer-pack": "*",
"symfony/swiftmailer-bundle": "^3.1",
"symfony/twig-bundle": "^4.1",
"symfony/validator": "^4.1",
"symfony/web-link": "^4.1",
"symfony/yaml": "^4.1"
},
"require-dev": {
"symfony/debug-pack": "*",
"symfony/dotenv": "^4.1",
"symfony/maker-bundle": "^1.0",
"symfony/profiler-pack": "*",
"symfony/test-pack": "^1.0",
"symfony/web-server-bundle": "^4.1"
},
"config": {
"preferred-install": {
"*": "dist"
},
"sort-packages": true
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
},
"replace": {
"symfony/polyfill-iconv": "*",
"symfony/polyfill-php71": "*",
"symfony/polyfill-php70": "*",
"symfony/polyfill-php56": "*"
},
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
]
},
"conflict": {
"symfony/symfony": "*"
},
"extra": {
"symfony": {
"allow-contrib": false
}
}
}

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

Symfony 4 No Route Страница приветствия

После этого перейдите к следующему шагу.

2. Установите FOSUserBundle

После создания вашего проекта приступите к установке FOSUserBundle с composer с помощью следующей команды:

composer require friendsofsymfony/user-bundle "~2.0"

Это начнется с установки, и вам не нужно будет ничего настраивать в ядре или что-то в этом роде, однако вы увидите сообщение об ошибке после завершения процесса:

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

Игнорируйте это и переходите к следующему шагу.

3. Создать класс пользователя

Далее вам нужно будет создать сущность User в вашем проекте, объект класса, который обрабатывает объект пользователя. Поскольку мы работаем с FOSUserBundle, класс имеет следующую структуру, поэтому обязательно создайте файл в /project/src/Entity каталог с именем User.php и следующий контент:

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

После создания пользовательского объекта необходимо изменить конфигурацию безопасности, установив кодировщик FOSUserBundle по умолчанию, определяя его в качестве поставщика безопасности.

Изменить /project/config/packages/security.yaml вместо файла и измените его содержимое следующим образом:

# config/packages/security.yaml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN:       ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
logout:       true
anonymous:    true
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
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 }

5. Создайте файл конфигурации FOSUserBundle

Как только FOSUserBundle определен как поставщик пользователя по умолчанию, вам необходимо определить его конфигурацию. В Symfony 4 это можно сделать с помощью нового файла yaml /project/config/packages/fos_user.yaml это будет иметь конфигурацию по умолчанию этого пакета:

# config/packages/fos_user.yaml
fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: App\Entity\User
from_email:
address: "test@domain.com"
sender_name: "test@domain.com"

6. Разрешить шаблоны PHP и Twig и включить маршрутизацию

В соответствии с требованиями FOSUserBundle необходимо включить механизмы шаблонов PHP и Twig, поэтому обязательно включите их в /project/config/packages/framework.yaml файл:

framework:
templating:
engines: ['twig', 'php']

Вам также необходимо включить маршруты FOSUserBundle, поэтому создайте файл маршрутов для FOSUserBundle вместе с файлом /project/config/routes/fos_user.yaml и добавьте следующее содержание:

fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"

Это позволит зарегистрировать маршруты FOSUserBundle по умолчанию, такие как вход в систему, выход из системы, регистрация и т. Д.

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

В качестве последнего шага вам нужно всего лишь обновить схему вашей базы данных с помощью следующей команды:

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

Это создаст fos_user таблица в вашей базе данных, и вы сможете регистрировать пользователей. На этом шаге установка и настройка FOSUserBundle заканчивается.

8. Тестирование пользовательской системы

В качестве последнего шага вы можете протестировать FOSUserBundle в своем проекте, подключаясь к веб-проекту, например, по маршруту регистрации, например http://yourproject/registerгде вы найдете форму FOSUserBundle:

Страница регистрации FOSUserBundle

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