将扩展的配置文件实体添加到FOS UserBundle [英] Adding extended profile entity to FOS UserBundle

查看:61
本文介绍了将扩展的配置文件实体添加到FOS UserBundle的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试扩展FOS UserBundle,以允许扩展的概要文件实体除了基本的UserBundle字段之外还保存其他信息.因为我在网站上有多种类型的用户,所以我创建了单独的实体来保存配置文件信息.我的实体设置如下:

I am trying to extend the FOS UserBundle to allow for extended profile entities to hold additional information in addition to the basic UserBundle fields. Because I have multiple types of users on the site I have created separate entities to hold the profile information. I have the entities set up as follows:

class UserProfile
{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var integer
     */
    private $userId;

    /**
     * @var string
     */
    private $phone;

    /**
     * @var string
     */
    private $language;

    /**
     * @var string
     */
    private $company;

    /**
     * @var string
     */
    private $salutation;

    /**
     * @var string
     */
    private $fax;

    /**
     * @var string
     */
    private $region;

我的配置

type: entity
table: user_profile
fields:
    id:
        type: integer
        id: true
        generator:
            strategy: AUTO
    phone:
        type: string
        length: '15'
    language:
        type: string
        length: '50'
    company:
        type: string
        length: 255
    salutation:
        type: string
        length: '5'
    fax:
        type: string
        length: '15'
    region:
        type: string
        length: 255
oneToOne:
    userId:
        targetEntity: User
        joinColumn: 
            name: user_id
            referencedColumnName: id
lifecycleCallbacks: {  }

我还有其他几种类型的用户,它们的具体信息截然不同,因此我需要单独的实体,例如,我可能有一个带有3个地址的用户或雇员ID等.鉴于此,我应该如何实现创建UserBundle信息时创建用户配置文件信息的注册表格?预先感谢!

I have several other user types with more specific information that is drastically different, so I need the separate entities, for instance I may have a user with 3 addresses, or employee ids, etc. Given this, how should I implement the registration form to create user profile information when I am creating the UserBundle information? Thanks in advance!

推荐答案

如果您使用MySQL和php进行实体定义,则必须按照以下步骤创建实体:

If you are using MySQL and php for your entities definition, then you have to create your Entity as follow:

<?php
// src/Acme/UserBundle/Entity/UserProfile.php

namespace Acme\UserBundle\Entity;

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

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

    /**
     * @var string
     */
    private $phone;

    /**
     * @var string
     */
    private $language;

    //....................
    //Add all your properties here

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

第二步是创建您要查询的字段的表单类型:

The second step is to create you form type asking the fields you want:

// src/Acme/UserBundle/Form/Type/RegistrationFormType.php
<?php

namespace Acme\UserBundle\Form\Type;

use Symfony\Component\Form\FormBuilderInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;

class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);

        // add your custom field
        $builder->add('phone');
        $builder->add('language');

        //...............
        //Add all your properties here with $builder->add('property name')
    }

    public function getName()
    {
        return 'acme_user_registration';
    }
}

现在,您需要让分发包知道您要使用自定义表单:

Now you need to let the bundle know that you want to use your custom form:

# src/Acme/UserBundle/Resources/config/services.yml
services:
    acme_user.registration.form.type:
        class: Acme\UserBundle\Form\Type\RegistrationFormType
        arguments: [%fos_user.model.user.class%]
        tags:
            - { name: form.type, alias: acme_user_registration }

最后一步是告诉FOSUserBundle,它将使用您的表单类型而不是默认的表单类型:

The last step is about telling FOSUserBundle that it will use your form type instead of the default one:

# app/config/config.yml
fos_user:
    # ...
    registration:
        form:
            type: acme_user_registration

来源:

https://github .com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md#step-3-create-your-user-class
https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md

这篇关于将扩展的配置文件实体添加到FOS UserBundle的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆