Symfony框架之FOSUserBundle入门教程

原文地址: http://symfony.com/doc/current/bundles/FOSUserBundle/index.html

Symfony的安全组件为你提供了一个灵活的框架, 它允许你从配置文件, 数据库, 或者其他任何你想象的到的地方来加载用户. FOSUserBundle则建立在此基础上, 更方便快速的将用户信息存储到数据库之中.

准备工作
1.3.x版本的FOSUserBundle依赖于Symfony2.1+. 如果你使用的是Symfony2.0.x, 请使用1.2.x系列的版本.

翻译
如果你要使用此bundle提供的默认文本, 你必须保证你的配置文件中已经开启了翻译功能.

1234
# app/config/config.yml

framework:    translator: ~

更多关于翻译的信息, 请点击Symfonydocumentation

安装
整个安装过程有7个步骤:

  1. 使用composer下载FOSUserBundle
  2. 启用Bundle
  3. 创建你的User类
  4. 配置应用中的security.yml文件
  5. 配置FOSUserBundle
  6. 导入FOSUserBundle的路由文件
  7. 更新数据库的Schema

步骤1:使用Composer下载FOSUserBundle

使用composer安装bundle:

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

Composer会将bundle安装到你项目中的vendor/friendsofsymfony/user-bundle文件夹内.
如果你遇到了缺少配置参数的错误, 例如 The child node "db_driver" at path "fos_user" must be configured, 你应该先完成步骤5, 然后再重新执行这一步.

步骤2: 启用Bundle

在kernel中启用此bundle:

1234567891011

public function (){    $bundles = array(        // ...        new FOSUserBundleFOSUserBundle(),        // ...    );}

步骤3:创建你的用户类

FOSUserBundle自始至终是使用一些User类来操作数据库的 (MySql, MongoDB, CouchDB, 等等). 你首先应该为你的应用创建一个User类.这个类可以包含任何你觉得有用的方法和属性. 因为这是你的User类.
FOSUserBundle提供了一些已经映射了大多数字段的基类, 这个类能让你更简单的创建entity. 你可以这么使用:

  1. 继承User的基类.
  2. 映射id字段. 它必须被设为protected, 因为在父类中他已经被定义过了.

当你继承了FOSUserBundle提供的已经做过映射的超类时, 不要定义其他已经定义好的映射.

接下来你将看到根据你存储方式的不同如何来定义你的User类(Doctrine ORM, MongoDB ODM, 或 CouchDB ODM).

如果在你的 User 类中重写了__construct()方法, 请务必执行 parent::__construct(), 因为User基类通过这个方法初始化了一些字段.

a)Doctrine ORM User class

如果你通过Doctrine ORM来管理用户, 你的User类应该存在Entity命名空间之内, 就像这样.

123456789101112131415161718192021222324252627
// src/AppBundle/Entity/User.php

namespace AppBundleEntity;

use FOSUserBundleModelUser as BaseUser;use DoctrineORMMapping as ORM;

/** * @ORMEntity * @ORMTable(name="fos_user") */class User extends BaseUser{    /**     * @ORMId     * @ORMColumn(type="integer")     * @ORMGeneratedValue(strategy="AUTO")     */    protected $id;

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

user在标准SQL中是一个保留字, 如果你需要使用这个保留字, 那就要用反引号把它包围起来.就像这样 @ORMTable(name=”`user`“)

b)MongoDB User class

假如你使用 Doctrine MongoDB ODM来操作你的用户, 那你的User类应该在你的bundle中的Document命名空间之内, 就像下面这样:

123456789101112131415161718192021222324
// src/AppBundle/Document/User.php

namespace AppBundleDocument;

use FOSUserBundleModelUser as BaseUser;use DoctrineODMMongoDBMappingAnnotations as MongoDB;

/** * @MongoDBDocument */class User extends BaseUser{    /**     * @MongoDBId(strategy="auto")     */    protected $id;

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

c) CouchDB User class
如果你通过Doctrine CouchDB ODM来错做用户, 你的User类应该在CouchDocument命名空间中, 就像这样:

123456789101112131415161718192021222324
// src/AppBundle/CouchDocument/User.php

namespace AppBundleCouchDocument;

use FOSUserBundleModelUser as BaseUser;use DoctrineODMCouchDBMappingAnnotations as CouchDB;

/** * @CouchDBDocument */class User extends BaseUser{    /**     * @CouchDBId     */    protected $id;

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

步骤4:配置应用中的security.yml文件

为了让Symfony的安全组件能够使用FOSUserBundle, 你需要配置security.yml文件. security.yml包含了应用安全组件的基本配置.
下面是能够使用FOSUserBundle的必须配置.

123456789101112131415161718192021222324252627282930
# app/config/security.ymlsecurity:    encoders:        FOSUserBundleModelUserInterface: 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 }

providers部分, 你通过fos_userbundle别名来使用FOSUserBundle中可用的的用户服务提供者.它的id是fos_user.user_provider.username.

下面我们来看firewalls部分. 这里我们申明了一个防火墙名为main. 通过指定form_login, 你需要告诉Symfony框架在任何时候的请求发送到这个防火墙时
都将引导用户进行认证, 不然用户将被重定向到一个表单页来输入他的凭证.

access_control部分你可以指定用户在访问你应用中特殊的地址时所需要的凭证.bundle指定未认证用户能够在登录表单以及所有的路由中创建用户和重置密码.
这就是为什么你指定任何请求去匹配/login或者以/register/resetting开头的地址时,将用户类型指定为匿名用户了.你肯定也注意到了, 任何以/admin开头的请求地址都需要用户为ROLE_ADMIN的身份.

更多关于security.yml文件的配置, 请查阅Symfony安全组件文档

请注意我们在防火墙中配置的名称main, 你将在下一个步骤中使用它来配置FOSUserBundle.

步骤5:配置FOSUserBundle

现在我们配置的security.yml已经能够让FOSUserBundle正确的运行了, 接下来我们来为应用配置一些特定的需求.
根据你使用的数据库类型, 添加下面的配置信息到你的config.yml文件中.

12345
# app/config/config.ymlfos_user:    db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'    firewall_name: main    user_class: AppBundleEntityUser

仅需配置三个必须的配置项:

  • 你使用的数据库类型.(orm, mongodb, couchdb)
  • 你在步骤4中配置的防火墙名字.
  • 在步骤3中创建的User类的全路径名.

步骤6:导入FOSUserBundle的路由文件

现在你已经配置并且启用了整个bundle, 剩下的就是要导入所有的FOSUserBundle路由文件.
通过导入路由文件, 你将会生成一些现成的页面, 比如登录, 创建用户等等.

123
# app/config/routing.ymlfos_user:    resource: "@FOSUserBundle/Resources/config/routing/all.xml"

为了正常的使用内部的邮件功能(用于用户激活以及重置密码功能), 你必须配置并且启用了SwiftmailerBundle

步骤7:更新数据库的Schema

至此, 整个bundle已经配置完毕, 因为在步骤4中你创建了User类并且添加了新的entity, 所以现在你要做的就是更新你的数据库Schema.
如果使用ORM,请执行下面命令.

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

若使用的是MongoDB, 你则需要执行下面命令来创建索引.

1
$ php bin/console doctrine:mongodb:schema:create --index

现在你可以在http://app.com/app_dev.php/login地址中登录了.

下一步
现在你已经完成了FOSUserBundle的基本安装与配置, 可以了解一些更高级的特性.
比如下面这些可用的文档:
重写FOSUserBundle的默认模板
挂载到控制器
重写FOSUserBundle的默认控制器
重写FOSUserBundle的默认表单
关于FOSUserBundle的用户管理服务
FOSUserBundle命令行管理工具
FOSUserBundle之使用用户名或密码登录
FOSUserBundle用户名表单字段
FOSUserBundle的邮件服务
使用FOSUserBundle进行分组(待翻译)

原文:大专栏  Symfony框架之FOSUserBundle入门教程

原文地址:https://www.cnblogs.com/chinatrump/p/11584585.html

时间: 2024-10-10 22:17:28

Symfony框架之FOSUserBundle入门教程的相关文章

【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的

[军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的 By hzp123   at 2014-02-18   265 阅读   0 回复   0.0 希赛币 之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们,要知道这才刚刚开始额~~~ 这一节,我们主要来了解CI的文件结构和CI是如何工作的.这一点特别的重要! 一.CI的文件结构:了解CI的文件结构可以帮助我们快速的对CI框架有一个整体的认识,就好像我们去

前端框架React Js入门教程【精】

现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领略ReactJS的风采吧~~ 章有点长,耐心读完,你会有很大收获哦~ 一.ReactJS简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用

迷你MVVM框架 avalonjs1.5 入门教程

avalon经过几年以后,已成为国内一个举足轻重的框架.它提供了多种不同的版本,满足不同人群的需要.比如avalon.js支持IE6等老旧浏览器,让许多靠政府项目或对兼容性要求够高的公司也能享受MVVM的乐趣.avalon.modern.js支持IE10以上版本,优先使用新API,性能更优,体积更少.avalon.mobile.js在avalon.modern的基础提供了触屏事件的支持,满足大家在移动开发的需求.此外,它们分别存在avalon.xxx.shim版本,指无自带加载器版,avalon

.NET轻量级MVC框架:Nancy入门教程(一)

当我们要接到一个新的项目的时候,我们第一时间想到的是用微软的MVC框架,但是你是否想过微软的MVC是不是有点笨重?我们这个项目用MVC是不是有点大材小用?有没有可以替代MVC的东西呢?看到这里也许你会反问我,微软的MVC到底什么地方不好了?这个暂且不说,我们先认识一下Nancy,来了解一下他和MVC的不同.  一.Nancy简介 什么是Nancy呢?如果你学习过Ruby的话,就会知道Ruby中有个框架叫做Sinatra,Nancy就是Sinatra的.Net版本.如果你感觉微软的MVC过于笨重.

avalonjs1.5 入门教程

迷你MVVM框架 avalonjs1.5 入门教程 avalon经过几年以后,已成为国内一个举足轻重的框架.它提供了多种不同的版本,满足不同人群的需要.比如avalon.js支持IE6等老旧浏览器,让许多靠政府项目或对兼容性要求够高的公司也能享受MVVM的乐趣.avalon.modern.js支持IE10以上版本,优先使用新API,性能更优,体积更少.avalon.mobile.js在avalon.modern的基础提供了触屏事件的支持,满足大家在移动开发的需求.此外,它们分别存在avalon.

迷你MVVM框架 avalonjs 入门教程(司徒正美)

迷你MVVM框架 avalonjs 入门教程 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定属性与动态模板 作用域绑定(ms-controller, ms-important) 模板绑定(ms-include) 数据填充(ms-text, ms-html) 类名切换(ms-class, ms-hover, ms-active) 事件绑定(ms-on,……) 显示绑定(ms-visible) 插入绑定(ms-if) 双工绑定(ms-duplex) 样式绑定(ms-css) 数据绑

Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis

https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=63 https://www.zhihu.com/question/29444491/answer/146457757 1. Java - Struts框架教程Struts 是Apache软件基金会(ASF)赞助的一个开源项目.通过采用JavaServlet/JSP技术,实现了基于Java EEWeb

AJAX技术与Struts1框架配合使用入门教程

由于公司使用技术比较陈旧,依然使用struts1框架,所以写个AJAX与Struts1配合使用的入门教程.下面进入正题: 1.首先介绍一下AJAX在JS中的写法:      $.ajax({          url:"<%=basePath%>xxx.do",//接收AJAX请求的路径,需要在xml文件中配置          dataType:'text',//回调函数返回值类型,text代表字符串          type:"post"//请求方

Android轻量级ORM框架ActiveAndroid入门教程(转)

注:没有找到出处,如有侵犯,请告知 开始ActiveAndroid神奇之旅: 在AndroidManifest.xml中我们需要添加这两个 AA_DB_NAME (数据库名称,这个name不能改,但是是可选的,如果不写的话 是默认的"Application.db"这个值) AA_DB_VERSION (数据库版本号,同样是可选的 – 默认为1) <manifest ...> <application android:name="com.activeandro