如果您使用数据库存储用户,则可以保存用户信息,如下所示: (来自the Symfony security book。)
$factory = $this->get('security.encoder_factory');
$user = new Acme\UserBundle\Entity\User();
$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword('mypassword', $user->getSalt());
$user->setPassword($password);
但是,我想创建一个可重用的用户表单:
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';
}
}
并在控制器中使用该表单: (来自here)
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'));
}
}
为了使其可重用并与$ form-> bindRequest兼容,您应该将用于散列密码的代码放在本文开头显示(以及生成盐的代码) ()方法,如果您需要用户注册表单和用户配置文件编辑表单等?
答案 0 :(得分:2)
我建议您查看:https://github.com/FriendsOfSymfony/FOSUserBundle。即使您想编写自己的解决方案,也可以从该捆绑包中获得非常好的想法。
答案 1 :(得分:0)
密码加密最好放在Doctrine的@PrePersist回调方法中。
答案 2 :(得分:0)
在模型中?
在设置器中,您可以添加加密。