最新消息:文章中包含代码时,请遵守代码高亮规范!

覆写FOSUserBundle默认Entity【原创】

PHP Pota 406浏览 0评论

Symfony Security组件提供了一个灵活的安全框架,允许您从配置,数据库或任何其他可以想像的地方加载用户。FOSUserBundle构建在其上,使用户快速方便地存储在数据库中。在上篇文章中有说到Security组件的三方加载用户问题,对于常规使用中采用之前的方式进行用户组管理不是很灵活,再次Symfony社区中的FOSUserBundle提供了更为灵活的用户管理方式。

通过文章FosUserBundle-安装篇【原创】的介绍以及官方文档一步一步走下去相信安装上来说应该不存在什么问题,这里也就目前遇到的两个小问题说明一下,FOSUserBundle2.0需求的Symfony最低版本为2.8 PHP版本为5.5.9 请在使用官方文档安装时,满足当前条件,不过也因为我目前使用的PHP版本为5.5.3硬性不满足也就临时在composer.json文件夹中修改了

"config": {
    "bin-dir": "bin",
    "platform": {
        "php": "5.5.9"
    }
},

使得可以通过检测安装目前还未发现有什么问题出现,可能不兼容方法现在还未用到,此方法不可取,仅本地测试时使用进行安装研究。

安装此Bundle相信也是为了获得它提供的方法,按照官方文档在用户的Entity中继承FOS\UserBundle\Model\User 后User表中只有一些常见的字段 此时若是在Entity中新增字段,此时尝试使用默认注册表单注册,您将发现您的新字段属性不是表单的一部分。您需要创建自定义表单类型并配置该Bundle才能使用它。

第一步是在自己的Bundle中创建一个新的表单类型。然后添加自定义name字段。

<?php
// src/AppBundle/Form/RegistrationType.php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
    }

    public function getParent()
    {
        return 'FOS\UserBundle\Form\Type\RegistrationFormType';
    }

    public function getBlockPrefix()
    {
        return 'app_user_registration';
    }

    // For Symfony 2.x
    public function getName()
    {
        return $this->getBlockPrefix();
    }
}

现在,您已经创建自定义表单类型,您必须将它声明为服务以使用它。标签必须具有一个name值form.type和一个alias 等于从getName您的表单类型类的方法返回的字符串的值。在alias您指定是你将在FOSUserBundle配置用什么来让Bundle知道你想用你的自定义表单。

# app/config/services.yml
services:
    app.form.registration:
        class: AppBundle\Form\RegistrationType
        tags:
            - { name: form.type, alias: app_user_registration }

最后,您必须更新FOSUserBundle的配置,以便它将使用您的表单类型而不是默认的。下面是用于YAML改变登记表型的配置。

# app/config/config.yml
fos_user:
    # ...
    registration:
        form:
            type: AppBundle\Form\RegistrationType

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/21288.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Pota的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!