个性化阅读
专注于IT技术分析

如何在Symfony 4中安装和配置FOSUserBundle

本文概述

随着Symfony 4的推出, 很多东西发生了变化, 其中大部分是永久的。但是, 当你在不断处理相同事物(逻辑)的企业中工作时, 发现这些事物在新框架上的工作方式将很困难。 Symfony 4就是这种情况, 用户系统的实现变得更加容易。但是, 如果你喜欢FOSUserBundle所提供的便利, 那么你可能想知道, 仍然可以在Symfony 4上实现它。

在本文中, 我们将向你展示如何在新的Symfony 4项目中安装传统的FOSUserBundle。

1.创建传统的Web应用程序

为了在基于symfony 4的项目上实现FOSUserBundle, 你将需要使用Symfony的传统Web应用程序版本(该版本安装了必需的依赖项以创建Web应用程序, 例如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

创建项目后, 使用以下命令继续使用composer安装FOSUserBundle:

composer require friendsofsymfony/user-bundle "~2.0"

这将从安装开始, 并且你不需要在内核中进行任何配置或类似的操作, 但是在过程完成后, 你会发现一条错误消息:

必须配置路径” fos_user”处的子节点” db_driver”。

忽略它, 继续下一步。

3.创建用户类别

接下来, 你需要在项目中创建User实体, 即处理用户对象的类对象。在使用FOSUserBundle时, 该类具有以下结构, 因此请确保在/ project / src / Entity目录中使用名称User.php和以下内容创建文件:

<?php
// src/Entity/User.php

namespace App\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

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路由, 因此使用文件/project/config/routes/fos_user.yaml为FOSUserBundle创建路由文件, 并添加以下内容:

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

这将注册FOSUserBundle的默认路由, 例如登录, 注销, 注册等。

7.更新你的数据库架构

最后, 你只需要使用以下命令来更新数据库的架构:

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

这将在数​​据库中创建fos_user表, 你将能够注册用户。通过此步骤, 完成FOSUserBundle的安装和设置。

8.测试用户系统

最后一步, 你可以在访问Web项目的项目中测试FOSUserBundle, 例如在注册路径(例如http:// yourproject / register)上, 你将在其中找到FOSUserBundle的形式:

注册页面FOSUserBundle

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在Symfony 4中安装和配置FOSUserBundle

评论 抢沙发

评论前必须登录!