Переопределение регистрации формы FOSUserBundle - PullRequest
2 голосов
/ 21 января 2012

У меня есть проблема, когда я хочу переопределить регистрационную форму 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, я создал его с официальной help :

<?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 " в компоновщике.

Ладно, но когда я проверяю эту форму:

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

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

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

Дизда.

1 Ответ

2 голосов
/ 01 марта 2012

Исправлено.

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

...