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

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

问题描述:

I have made a Symfony 2 form to edit a EmailAccount entity

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

However the $password field is encrypted with AES in database.

So when the user posts my-secret-password in the form, I want to set a different value in the entity (the encrypted value).

To encrypt, I have a simple service that does this: $encrypter->encrypt($string);

So how can I do this?

Here is my current form type:

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

You can get values from form in controller by calling 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

So you can encrypt password after checking that form is valid:

$form->bind($request);

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