У меня есть проблема, когда я хочу переопределить регистрационную форму 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 " в компоновщике.
Ладно, но когда я проверяю эту форму:
У спонсора, который существует, у меня появляется ошибка "Пожалуйста, введите пароль".(конечно, я ввел пароль дважды ..).
Но когда я отправляю форму с пользователем, которого не существует, форма регистрации была успешно отправлена!
Я что-то не так сделал?Спасибо за помощь !; -)
Дизда.