2

当我想覆盖 FOSUserBundle 注册表单时,我遇到了问题。

交易是,在用户实体中,一些用户可以有一个“赞助商”(赞助商是同一实体的多对一),更明确地说,这是用户实体:

<?php

namespace Diz\UserBundle\Entity;

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

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


    /**
     * create FK "sponsor_id" referenced to the id field on the same table 
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(name="sponsor_id", referencedColumnName="id", onDelete="SET NULL")
     */
    protected $sponsor;


    public function __construct()
    {
        // import FOSUserBundle properities ->
        parent::__construct();

    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set sponsor
     *
     * @param Dizsurf\UserBundle\Entity\User $sponsor
     */
    public function setSponsor(\Dizsurf\UserBundle\Entity\User $sponsor)
    {
        $this->sponsor = $sponsor;
    }

    /**
     * Get sponsor
     *
     * @return Dizsurf\UserBundle\Entity\User 
     */
    public function getSponsor()
    {
        return $this->sponsor;
    }

}

你看 ?

然后,为了覆盖 RegistrationFormType,我在官方帮助下创建了一个:

<?php

namespace Diz\UserBundle\Form\Type;

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

class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilder $builder, array $options)
    {

        parent::buildForm($builder, $options);

        // add your custom field
        $builder->add('sponsor', 'fos_user_username');

    }

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

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'Diz\UserBundle\Entity\User', // Ni de modifier la classe ici.
        );
    }
}

就这样 !看起来很简单!但...

为了简单地将用户名转换为用户实体,FOS 建议在构建器中使用“ fos_user_username ”。

对我来说好吧,但是当我测试这个表格时:

  • 对于确实存在的赞助商,我收到此错误“请输入密码”。(当然我已经输入了两次密码..)。

  • 但是当我向不存在的用户提交表单时,注册表已成功提交!

我做错了吗?感谢您的帮助 !;-)

迪兹达。

4

1 回答 1

2

固定的。

我刚刚将 symfony 从 2.0.10 升级到 2.1,问题不存在了!

于 2012-02-29T20:33:11.163 回答