2014-02-17 165 views
2

我想重写FOSUserBundle的注册表格。FOSUserBundle覆盖注册表格

我跟了这页:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.3.x/Resources/doc/overriding_forms.md

我想要的形式包含这些六个输入:

  1. 称谓
  2. 名字
  3. 姓氏
  4. 电子邮件
  5. 密码
  6. 密码确认

我的文件夹结构:

enter link description here

我的用户类别:

<?php 

namespace Bundles\FrontendBundle\Entity; 

use FOS\UserBundle\Entity\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=255) 
    * 
    * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"}) 
    * @Assert\MinLength(limit="3", message="The name is too short.", groups={"Registration", "Profile"}) 
    * @Assert\MaxLength(limit="255", message="The name is too long.", groups={"Registration", "Profile"}) 
    */ 
    //protected $name; 

    public function __construct() 
    { 
     parent::__construct(); 
     // your own logic 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

} 

我service.yml数据:

parameters: 
services: 
    frontendbundle.registration.form.type: 
     class: Bundles\FrontendBundle\Form\Type\RegistrationFormType 
     arguments: [%fos_user.model.user.class%] 
     tags: 
      - { name: form.type, alias: frontend_user_registration } 
    frontendbundle.form.handler.registration: 
     class: Bundles\FrontendBundle\Form\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: Bundles\FrontendBundle\Entity\User 
registration: 
    form: 
     type: frontend_user_registration 
     handler: frontendbundle.form.handler.registration 

我RegistrationFormType类:

<?php 

namespace Bundles\FrontendBundle\Form\Type; 

use Symfony\Component\Form\FormBuilderInterface; 
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType; 

class RegistrationFormType extends BaseType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 

     // add your custom field 
     $builder->add('firstname') 
      ->add('lastname') 
      ->add('salutation') 
      ->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle')) 
      ->add('plainPassword', 'repeated', array(
        'type' => 'password', 
        'options' => array('translation_domain' => 'FOSUserBundle'), 
        'first_options' => array('label' => 'form.password'), 
        'second_options' => array('label' => 'form.password_confirmation'), 
        'invalid_message' => 'fos_user.password.mismatch', 
       ) 
      ) 
     ; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => "Bundles\FrontendBundle\Entity\User" 
     )); 
    } 

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

如何做我需要在这里定义字段我与六个输入计划?

希望有人能帮助我。

+0

您的包是否继承自FOSUserBundle? –

+0

嘿杰弗里,是的,我的包继承了FOSUserBundle – Dave

回答

0

只需在RegistrationFormType中添加字段,并在密码字段中自动生成确认输入。

<?php 

namespace Bundles\FrontendBundle\Form\Type; 

use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    parent::buildForm($builder, $options); 

    $builder->add('firstname') 
      ->add('lastname') 
      ->add('salutation') 
      ->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle')) 
      ->add('plainPassword', 'repeated', array(
       'type' => 'password', 
       'options' => array('translation_domain' => 'FOSUserBundle'), 
       'first_options' => array('label' => 'form.password'), 
       'second_options' => array('label' => 'form.password_confirmation'), 
       'invalid_message' => 'fos_user.password.mismatch', 
       ) 
      ) 
    ; 
} 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => "Bundles\FrontendBundle\Entity\User" 
)); 
} 

public function getName() 
{ 
    return 'frontend_user_registration'; 
} 
+0

嘿Charly,谢谢你的回答。我更新了这个,在我的问题中我也要更新。现在我有错误两个消息:** InvalidArgumentException:无法替换别名“frontendbundle.form.handler.registration”与“fos_user.registration.form.handler”。**和** InvalidArgumentException:服务定义“frontendbundle.form。 handler.registration“不存在**你在我的问题的顶部看到我的实际config.yml,我不知道什么是错的? – Dave

+0

不客气! ;)对于第一个错误,您必须在config.yml中将fos_user:registration:form:type:更改为:“frontend_user_registration”(我已在您的问题中编辑它)。 对于第二个错误(服务不存在),您必须在您的services.yml和config.yml中更改名称(在“frontendbundle.form.handler.registration”中更改“FrontendBundle.form.handler.registration” ) –

+0

嘿Charly再次感谢您的回答。我更新我的config.yml和service.yml(在我的问题太),但我有同样的错误:(。我清除缓存,但没有帮助。我有我的两个数据错误? – Dave