- FOSUserBundle简介
提供在Symfony2用户系统的支持,方便灵活的框架,用户管理旨在处理用户注册,密码找回等共通业务。
特点:
用户可以通过Doctrine ORM, MongoDB/CouchDB ODM or Propel创建存储
支持用户通过邮箱注册
支持密码重置
包括单元测试
*该框架不支持权限认证,但是可以通过 user provider 使用SecurityBundle
- 安装
当前版本需要Symfony2.1 +,如果您正在使用Symfony的2.0.x版本,请使用束的1.2.x版本。
如果想使用国际化,需要确认translator已经启用。
# app/config/config.yml framework: translator: ~
快速安装方法:
1. 修改引用工程的composer.json,如下:
"require": { //...... "friendsofsymfony/user-bundle": "1.3.5" },
2. 执行命令[composer update]下载该框架
3. 修改代码,使该框架有效,如下:
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new FOS\UserBundle\FOSUserBundle(), ); }
4. 创建自己的user类,该框架提供了父类,有很多参数,可以很容易创建自己的entity。
a. 从Model文件夹继承父User类
b. 创建id字段,因为从父类继承,数据必须声明为protected类型
c. Doctrine ORM User Class,Annotations
<?php // src/Portal/LoginUserBundle/Entity namespace Portal\LoginUserBundle\Entity; use Doctrine\ORM\Mapping as ORM; use FOS\UserBundle\Entity\User as BaseUser; /** * Person * * @ORM\Table(name="for_user") * @ORM\Entity(repositoryClass="Portal\LoginUserBundle\Entity\UserRepository") */ class User extends BaseUser { public function __construct() { parent::__construct(); // own logic } /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(name="mail", type="string") **/ protected $email; /** * @ORM\Column(name="password", type="string") **/ protected $password; }* user是数据库保留的关键字,所以最好不要用为表名
5. 执行命令[php app/console doctrine:generate:entities]生成get和set方法
6. 为了让框架的security.yml
# app/config/security.yml security: encoders: FOS\UserBundle\Model\UserInterface: sha512 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_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 }
7. 设置config文件
# app/config/config.yml fos_user: db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel' firewall_name: main user_class: Portal\LoginUserBundle\Entity\User
8. 设置routing
# app/config/routing.yml fos_user_security: resource: "@FOSUserBundle/Resources/config/routing/security.xml" 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
*为了使用内置的电子邮件功能(确认账号,密码重置),你必须激活和配置SwiftmailerBundle。
9. 更新数据库表结构,[php app/console doctrine:schema:update --force]
10. http://app.com/app_dev.php/login