Symfony表单:如何在有效提交后处理字段


Symfony form: how to process a field after valid submission?

我制作了一个Symfony 2表格来编辑EmailAccount实体

class EmailAccount
{
    protected $host;
    protected $user;
    protected $password;
}

但是,$password字段在数据库中使用AES加密

因此,当用户在表单中发布my-secret-password时,我想在实体中设置一个不同的值(加密值)。

要加密,我有一个简单的服务:$encrypter->encrypt($string);

那么我该怎么做呢?

这是我目前的表格类型:

class EmailAccountType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('host', 'text');
        $builder->add('user', 'text');
        $builder->add('password', 'password');
        $builder->add('save', 'submit');
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults([
            'data_class' => EmailAccount::class,
        ]);
    }
    public function getName()
    {
        return 'emailAccount';
    }
}

您可以通过调用getData():从控制器中的表单中获取值

    $form->bind($request); //after this 
    $data = $form->getData(); //all fields array
    $username = $form->get('username')->getData(); // only username field value
    $username = $form->get('username')->getViewData();//before mapping/traansformation

因此,您可以在检查表单是否有效后加密密码:

$form->bind($request);
if ($form->isValid()
{
    $newPassword = $encrypter->encrypt($form->get('password')->getData());
    $user->setPassword($newPassword);
}