从表单编码密码

enconde password from a form

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

从上面的注释和代码来看,您似乎只想覆盖 FOSUserBundle 的 change_password_content.html.twig 模板。这将允许您在自己的模板中为 FOSUserBundle 使用现有的 ChangePassword 表单类型和 ChangePasswordController。

执行此操作的参考在这里: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) 中所做的是用您自己在 app/Resources/views 中的模板覆盖 FOSUserBundle 中的模板。您的覆盖模板的内容与现在的 FOSUserBundle 完全相同。
  3. 现在继续对此覆盖模板进行任何所需的更改:例如更改扩展布局以使用您自己的布局并在 fos_user_content 块周围添加您可能需要的任何其他标记。保存。

您现在已经正确覆盖了 FOSUserBundle 模板。如果您需要进一步控制包含表单的内容模板,请继续对名为 change_password_content.html.twig 的模板重复上述操作,并将 change_password.html.twig 模板中的包含更改为“: ChangePassword/change_password_content.html.twig".

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

并且在正确执行上述重写后,您不需要重写 ChangePasswordController - 因此您将通过 FOSUserBundle 中的 UserManager 获得所需的密码散列。