gpt4 book ai didi

php - 将扩展配置文件实体添加到 FOS UserBundle

转载 作者:可可西里 更新时间:2023-11-01 12:33:41 26 4
gpt4 key购买 nike

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

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 信息时创建用户个人资料信息的注册表单?提前致谢!

最佳答案

如果您使用 MySQL 和 php 来定义您的实体,那么您必须按如下方式创建您的实体:

<?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
}
}

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

// 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';
}
}

现在您需要让 bundle 知道您想要使用您的自定义表单:

# 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 它将使用您的表单类型而不是默认表单类型:

# 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

关于php - 将扩展配置文件实体添加到 FOS UserBundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14968969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com