2012-01-21 4 views
2

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

+0

Вы можете увидеть форму здесь с ошибкой [ссылка] (http://cl.ly/3s293D2R1q3i3Q3J0z2S). Спасибо ^^ – dizda

ответ

2

Исправлено.

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

Смежные вопросы