如何使密码不需要FOS Bundle

时间:2018-06-13 12:30:23

标签: symfony passwords fosuserbundle

在我的Symfony2项目中,如何使用Symfony2中的FOS用户软件包更新用户的配置文件时,非强制性密码(不是强制性的,但在添加新配置文件时是强制性的)

1 个答案:

答案 0 :(得分:1)

您必须覆盖个人资料表单并仅定义您需要的字段。

更新配置以使用新表单类型:

# app/config.yml
fos_user:
    #... other options
    profile:
        form:
            type: AppBundle\Form\Type\ProfileFormType

我不是百分百肯定,我可能需要将新表单类型定义为服务:

# app/services.yml or other config file you define services in
services:
    AppBundle\Form\Type\ProfileFormType:
        arguments:
            - '%fos_user.model.user.class%'

以您自己的表单类型定义字段:

// AppBundle/Form/Type/ProfileFormType.php
namespace AppBundle\Form\Type;

use FOS\UserBundle\Form\Type\ProfileFormType as FosProfileFormType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\FormBuilderInterface;

class ProfileFormType extends FosProfileFormType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add(
                'firstname',
                null,
                [
                    'label' => 'form.label_firstname',
                    'required' => true,
                ]
            )
            ->add(
                'lastname',
                null,
                [
                    'label' => 'form.label_lastname',
                    'required' => true,
                ]
            )
            ->add(
                'password',
                PasswordType::class,
                [
                    'required' => false,
                ]
            )
        ;
    }
}

当然,非必需的密码很可能不是您想要的,可能您根本不想在表单中显示,所以只需将其删除即可。