Переопределение регистрации формы FOSUserBundle

У меня проблема, когда я хочу переопределить регистрационную форму FOSUserBundle.

Дело в том, что в сущности «Пользователь» у некоторых пользователей может быть «Спонсор» (спонсор — это ManyToOne для той же сущности), если быть более точным, это сущность «Пользователь»:

<?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" в конструкторе.

Хорошо для меня, но когда я тестирую эту форму:

  • Со спонсором, который существует, я получил эту ошибку «Пожалуйста, введите пароль». (конечно, я ввел пароль дважды ..).

  • Но когда я отправляю форму с несуществующим пользователем, регистрационная форма была успешно отправлена!

Я сделал что-то не так ? Спасибо за помощь ! ;-)

Дизда.


person dizda    schedule 21.01.2012    source источник
comment
Вы можете увидеть форму с ошибкой здесь ссылка. Спасибо ^^   -  person dizda    schedule 21.01.2012


Ответы (1)


Фиксированный.

Я только что обновил Symfony с 2.0.10 до 2.1, и проблема больше не возникает!

person dizda    schedule 29.02.2012