本文概述
- 1.创建传统的Web应用程序
- 2.安装FOSUserBundle
- 3.创建用户类别
- 4.更新安全配置文件
- 5.创建FOSUserBundle配置文件
- 6.允许PHP和Twig模板化并启用路由
- 7.更新你的数据库架构
- 8.测试用户系统
随着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
}
}
}
至少获得欢迎页面后, 准备项目并使其运行:
完成后, 继续下一步。
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的形式:
编码愉快!
评论前必须登录!
注册