Symfony 如何向我的 FOSUser 添加字段?

Symfony how could I add fields to my FOSUser?

我正在尝试向我的用户添加一个字段 'name',这就是我进行操作的方式

 namespace User\UserBundle\Controller;


use FOS\UserBundle\Controller\RegistrationController as BaseController;
class DefaultController extends BaseController
{
    public function indexAction()
    {
        $response = parent::registerAction();


        // ... do custom stuff
        return $response;
    }

这是我的用户类型

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);
        $builder
            ->add('nom')
            ->add('prenom')
        ;
    } 

当我尝试添加时,

{{ form_widget(form.name) }}

我收到这个错误

Method "nom" for object "Symfony\Component\Form\FormView" does not exist in FOSUserBundle:Registration:register.html.twig at line
      This is my user class 

namespace User\UserBundle\Entity;

use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255, nullable=true )
     */
    private $nom;
     /**
     * @var string
     *
     * @ORM\Column(name="prenom", type="string", length=255, nullable=true )
     */
    private $prenom;



    /**
     * Set nom
     *
     * @param string $nom
     * @return User
     */
    public function setNom($nom)
    {
        $this->nom = $nom;

        return $this;
    }

    /**
     * Get nom
     *
     * @return string 
     */
    public function getNom()
    {
        return $this->nom;
    }

    /**
     * Set prenom
     *
     * @param string $prenom
     * @return User
     */
    public function setPrenom($prenom)
    {
        $this->prenom = $prenom;

        return $this;
    }

    /**
     * Get prenom
     *
     * @return string 
     */
    public function getPrenom()
    {
        return $this->prenom;
    }
}

这是我在 app/config 下的内容 enter image description here
我还应该做什么?有什么建议吗?我是 FOSUserBundle 的新手。谢谢

您似乎在尝试将 nom 和 prenom 字段添加到注册表中。因此,您需要覆盖 FOSUserBundle 注册表格。按照 Overriding Default FOSUserBundle Forms 中的指南进行操作,其中显示了如何覆盖任何表单。

也许这篇link会对你有所帮助http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_forms.html

This is my config.yml

你都写在config.yml里吗?

您需要在config.yml中编写此代码:

fos_user:
db_driver: orm 
firewall_name: main
user_class: User\UserBundle\Entity\User
registration:
    form:
        type: user_userbundle_user

剩下的写在./config/services.yml

services:
fos_user.doctrine_registry:
    alias: doctrine
app.form.registration:
    class: UserUserBundle\Form\UserType
    tags:
        - { name: form.type, alias: user_userbundle_user }

所以我终于明白了!我将构造添加到我的 userType

public function __construct($class)
    {
        parent::__construct($class); 
    }

这是我的新 services.yml

parameters:
    user_user.registration.class: User\UserBundle\Entity\User

services:
    user.form.user:
        class: User\UserBundle\Form\UserType
        arguments: [%user_user.registration.class%]
        tags:
            - { name: form.type, alias: user_userbundle_user }

就是这些了,希望对大家有所帮助。谢谢大家