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