设置FOS UserBundle中隐藏的密码

时间:2017-05-30 08:56:15

标签: php symfony fosuserbundle symfony-forms

我想在注册表单中设置密码字段,因为我在第一步注册时不需要密码。由于我已经覆盖了表单,因此该字段现在没有显示,但我仍然无法提交表单,因为它说密码不应该是空白的。

所以我试过这个并且它不能正常工作

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';
}

}

任何帮助都将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分: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';
}}

现在它不显示为空白,并且要注册密码,我需要更新此字段。