У меня проблема, когда я хочу переопределить регистрационную форму FOSUserBundle.Регистрация регистрации формы FOSUserBundle
Сделка, в сущности пользователя, некоторые пользователи могут иметь «спонсор» (спонсор является ManyToOne к одной и той же организации), чтобы быть более явным, это Entity Пользователь:
<?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.
);
}
}
И это все! Похоже, быть довольно простым! Но ...
Чтобы просто преобразовать имя пользователя в User Entity, совет FOS использовать «fos_user_username» в построителе.
Хорошо для меня, но когда я проверить эту форму:
С спонсором, который действительно существует, я получил эту ошибку «Пожалуйста, введите пароль». (конечно, я дважды ввел пароль ..).
Но когда я отправляю форму с пользователем, которого нет, регистрационная форма была отправлена с успехом!
Я сделал что-то не так? Благодарим за помощь! ;-)
Dizda.
Вы можете увидеть форму здесь с ошибкой [ссылка] (http://cl.ly/3s293D2R1q3i3Q3J0z2S). Спасибо ^^ – dizda