Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Symfony2代码组织:在持久化到db之前,加密密码的逻辑应该放在哪里?_Forms_Symfony_Code Organization - Fatal编程技术网

Forms Symfony2代码组织:在持久化到db之前,加密密码的逻辑应该放在哪里?

Forms Symfony2代码组织:在持久化到db之前,加密密码的逻辑应该放在哪里?,forms,symfony,code-organization,Forms,Symfony,Code Organization,如果使用数据库存储用户,则可以保存用户信息,如下所示: (来自) 但是,我想创建一个可重用的用户表单: namespace App\Bundle\WebBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; class UserType extends AbstractType { public function buildForm(FormBuilde

如果使用数据库存储用户,则可以保存用户信息,如下所示: (来自)

但是,我想创建一个可重用的用户表单:

namespace App\Bundle\WebBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class UserType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('username')
            ->add('password')
        ;
    }

    public function getName()
    {
        return 'app_bundle_webbundle_usertype';
    }
}
并在控制器中使用表单: (来自)


如果您同时需要用户注册表单和用户配置文件编辑表单,那么您应该将本文开头显示的用于散列密码的代码(以及生成salt的代码)放在哪里,以使其可重用并与$form->bindRequest()方法兼容,等等?

我建议调查:。即使您想编写自己的解决方案,您也可以从该捆绑包中获得非常好的想法。

密码加密最好放在Doctrine的@PrePersist回调方法中。

在模型中

在setter中,可以添加加密

namespace App\Bundle\WebBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class UserType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('username')
            ->add('password')
        ;
    }

    public function getName()
    {
        return 'app_bundle_webbundle_usertype';
    }
}
if ($request->getMethod() == 'POST') {
    $form->bindRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getEntityManager();
        $em->persist($task);
        $em->flush();

        return $this->redirect($this->generateUrl('task_success'));
    }
}