我是PHP symfony的新手,我正在使用FOSUserbundle,我为用户更改密码创建了一个新视图,但很难从FOSUserBundle中嵌入更改密码表单,所以我手动创建一个html表单,并在视图的控制器中添加一些代码,一切正常,更改密码在我的数据库上工作,但问题是密码是纯文本,我需要它编码(加密),我如何编码我的密码把它发送到数据库?
以下是我的树枝视图中的表单:
<form action="{{path ('fos_user_profile_change_password')}}" method="POST" id="form_user_change_password">
<div class="form-group">
<div>
<label for="fos_user_change_password_form_current_password" class="required">Contraseña actual</label>
<input type="password" id="fos_user_change_password_form_current_password" name="fos_user_change_password_form[current_password]" required="required">
</div>
<div>
<label for="new_password" class="required">Nueva contraseña</label>
<input type="password" id="new_password" name="new_password" required="required">
</div>
<div>
<label for="new_password_repeat" class="required">Repita la contraseña</label>
<input type="password" name="new_password_repeat" id="new_password_repeat" required="required">
</div>
<div>
<input type="submit" value="{{ 'change_password.submit'|trans }}" class="btn btn-primary btn-block uppercase" />
</div>
</div>
</form>
这是我的控制器:
/**
* Change user password.
*
* @param Request $request
*
* @return Response
*/
public function changePasswordAction(Request $request)
{
$userManager = $this->get('fos_user.user_manager');
$user = $this->getUser();
$new_password = $_POST['new_password'];
$user->setPassword($new_password);
$userManager->updateUser($user);
$url = $this->generateUrl('fos_user_profile_edit');
$response = new RedirectResponse($url);
return $response;
}
请问我是PHP和Symfony3的新手:)
答案 0 :(得分:1)
从上面的评论和代码中,您似乎只想覆盖FOSUserBundle的change_password_content.html.twig模板。这将允许您在自己的模板中使用现有的ChangePassword Form Type和ChangePasswordController for FOSUserBundle。
执行此操作的参考位置为:https://symfony.com/doc/current/bundles/FOSUserBundle/overriding_templates.html
为了帮助您了解一些实施细节:
您现在已经完成了对FOSUserBundle模板的正确覆盖。如果您需要进一步控制包含表单的内容模板,请继续并针对名为change_password_content.html.twig的模板重复上述步骤,并将change_password.html.twig模板中的包含更改为“:ChangePassword / change_password_content.html。枝”。
上述内容现在意味着FOSUserBundle将使用您的覆盖模板而不是捆绑中的现有模板,让您完全控制标记,布局,样式等。
在正确执行上面的覆盖时,您不需要覆盖ChangePasswordController - 因此您将通过FOSUserBundle中的UserManager获得所需的密码哈希。