我制作了一个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';
}
}
答案 0 :(得分:1)
您可以通过调用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);
}