2017-05-30 48 views
0

我想设置密码字段的注册形式隐藏,因为我不需要在我的第一步注册密码。该字段现在没有显示,因为我已经重写了表单,但仍然无法提交表单,因为它表示密码不应为空。设置密码隐藏在FOS UserBundle

所以我尝试这样做,它不工作

class RegistrationType extends AbstractType 
{ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('firstname') 
     ->add('lastname') 
     ->add('username') 
     ->add('plainPassword',HiddenType::class) 
     ->add('sex') 
     ->add('email') 
     ->add('city') 
     ->add('zip_code') 
     ->add('age'); 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults([ 
     'data_class'=>'AppBundle\Entity\User' 
    ]); 
} 

public function getBlockPrefix() 
{ 
    return 'app_bundle_registration_type'; 
} 

}

任何帮助,将不胜感激。

谢谢。

回答

0

所以,不过现在在OlivierC的帮助下设法解决了这个问题!

所以我使用生命周期回调来坚持实体中的数据。

http://symfony.com/doc/current/doctrine/lifecycle_callbacks.html

实体:

/** 
* @ORM\Entity 
* @ORM\HasLifecycleCallbacks() 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 

/** 
* @return string 
*/ 
public function getPassword() 
{ 
    return $this->password; 
} 

/** 
* @ORM\PrePersist() 
*/ 
public function setPassword($password) 
{ 
    $this->password = 'abcdef'; 
}} 

现在,它不会显示为空白,并用密码登录,我需要更新此字段。

+0

您应该重命名您的方法setPasswordValue并且它不能有参数。无论如何,你并没有使用它 – OlivierC

0
$builder 
    ->add('password', HiddenType::class, [ 
     'required' => false, 
     'validation_groups' => false 
    ]); 

您有第三个参数来提供选项,您可以使用它来使其成为可选项。

+0

或者,如果您不需要密码_at all_,则可以覆盖用户实体并删除密码字段。 –

+0

你也是。 – Flosculus

+0

@Flosculus:不工作! – Arcv

0

要修改NotBlank约束,您可以覆盖FOSUserBundle/Resources/config/validation.xml。将其复制到MyBundle/Resources/config/validation.xml并进行所需的更改。

+0

我希望该字段仅以该形式隐藏,而我的情况下也需要密码才能使用其他形式。 – Arcv

+0

为什么不创建另一个表单? – L01C