2016-03-21 16 views
0

我重寫FOSUserBundle形態那樣:重寫默認FOSUserBundle窗體處理程序

class RegistrationType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array    $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->remove('username') 
     ; 
    } 

    public function getParent() 
    { 
     return 'fos_user_registration'; 
    } 

    public function getName() 
    { 
     return 'app_user_registration'; 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Application\Sonata\UserBundle\Entity\User', 
     )); 
    } 
} 

的目的是從寄存器形式刪除用戶名字段。 它的工作原理,但是當我使用的形式我有這樣的錯誤:

Please enter a username

所以我想按照這個文檔覆蓋FormHandler:https://symfony.com/doc/1.3.x/bundles/FOSUserBundle/overriding_forms.html#overriding-form-handlers

但我真的不得到如何去做我的情況下,我正在刪除一個領域?

這裏是我的YAML文件

# service.yml  
services: 
    app.form.registration: 
     class: Application\Sonata\UserBundle\Form\RegistrationType 
      tags: 
       - { name: form.type, alias: app_user_registration } 

     app.form.handler.registration: 
      class: Application\Sonata\UserBundle\Handler\RegistrationFormHandler 
      arguments: ["@fos_user.registration.form", "@request", "@fos_user.user_manager", "@fos_user.mailer", "@fos_user.util.token_generator"] 
      scope: request 
      public: false 

    # config.yml 
    fos_user: 
     db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel' 
     firewall_name: main 
     user_class: Application\Sonata\UserBundle\Entity\User 
     group: 
      group_class: Application\Sonata\UserBundle\Entity\Group 
      group_manager: sonata.user.orm.group_manager 
     service: 
      user_manager: sonata.user.orm.user_manager 
     registration: 
      form: 
       type: Application\Sonata\UserBundle\Form\RegistrationType 
       handler: app.form.handler.registration 

回答

1

我加入這個代碼到我的實體相關的用戶,使其工作:

public function setEmail($email) 
    { 
     parent::setEmail($email); 
     $this->setUsername($email); 
    }