从表单中输入密码

时间:2017-10-10 16:16:50

标签: php symfony fosuserbundle encode

我是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的新手:)

1 个答案:

答案 0 :(得分:1)

从上面的评论和代码中,您似乎只想覆盖FOSUserBundle的change_password_content.html.twig模板。这将允许您在自己的模板中使用现有的ChangePassword Form Type和ChangePasswordController for FOSUserBundle。

执行此操作的参考位置为:https://symfony.com/doc/current/bundles/FOSUserBundle/overriding_templates.html

为了帮助您了解一些实施细节:

  1. 转到vendor / friendsofsymfony / user-bundle / Resources / views / ChangePassword / change_password.html.twig并复制此文件的内容。
  2. 然后转到app / Resources / views并创建一个名为ChangedPassword的文件夹,然后创建一个新文件并粘贴您在上面(1)中复制的内容。将文件另存为change_password.html.twig - 您在步骤(1)和(2)中所做的操作将覆盖FOSUserBundle中的模板,并在app / Resources / views中使用您自己的模板。覆盖模板的内容与现在的FOSUserBundle完全相同。
  3. 现在继续对此覆盖模板进行所需的任何更改:例如,更改扩展布局以使用您自己的模板,并在fos_user_content块周围添加您可能需要的任何其他标记。保存。
  4. 您现在已经完成了对FOSUserBundle模板的正确覆盖。如果您需要进一步控制包含表单的内容模板,请继续并针对名为change_password_content.html.twig的模板重复上述步骤,并将change_password.html.twig模板中的包含更改为“:ChangePassword / change_password_content.html。枝”。

    上述内容现在意味着FOSUserBundle将使用您的覆盖模板而不是捆绑中的现有模板,让您完全控制标记,布局,样式等。

    在正确执行上面的覆盖时,您不需要覆盖ChangePasswordController - 因此您将通过FOSUserBundle中的UserManager获得所需的密码哈希。