php - FOSUserBundle 将更改密码表单与其他表单集成

标签 php symfony fosuserbundle

我想将 FOSUserBundle 的 change_password 形式集成到我的设置页面中,我也有 change_email 形式或其他信息。我知道如何在我的设计中集成 FOS,但不知道如何做我想做的事情。

现在,表单是通过 Controller 和表单生成器方法生成的,我不知道如何修改它...

提前致谢, 瓦伦丁

最佳答案

(我看到这是一个 8 个月前的问题,但也许它对某人有帮助。)

如果您只想为用户配置文件制作一个页面,最简单的方法是为密码更改事件使用单独的表单。 FOSUserBundle 提供了这个功能。因此,如果您想使用自己的路线和表格,只需从 FOS Controller 和表格中复制代码,更改一些参数(如路线名称和设计),就可以了。可能有一些更复杂的方法来使用这个 Bundle,但在我看来这是最简单和最灵活的。

FOSUserBundle 位于 /vendor/friendsofsymfony/user-bundle/FOS/UserBundle/ 目录中。 密码 Controller 位于 /Controller/ChangePasswordController.php 表格位于 /Resources/views/ChangePassword 中。

这是我在“设置”页面中执行此操作的方法。我只使用密码更改功能,但我假设,您可以对不同的表单进行单独的操作,然后将用户重定向回带有 View 的原始索引页面。

这是 Controller (我只改变了重定向路由和 View ):

use JMS\SecurityExtraBundle\Annotation\Secure;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use FOS\UserBundle\Model\UserInterface;

class SettingsController extends Controller
{
    /**
    * @Secure(roles="ROLE_USER")
    */
    public function indexAction()
    {
        $user = $this->container->get('security.context')->getToken()->getUser();
        if (!is_object($user) || !$user instanceof UserInterface) {
            throw new AccessDeniedException('This user does not have access to this section.');
        }

        $form = $this->container->get('fos_user.change_password.form');
        $formHandler = $this->container->get('fos_user.change_password.form.handler');

        $process = $formHandler->process($user);
        if ($process) {
            $this->get('session')->setFlash('notice', 'Password changed succesfully');

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

        return $this->render('AcmeHelloBundle:Settings:password.html.twig', ['form' => $form->createView()]);
    }
}

这是 View (password.html.twig) - 这里唯一的变化是路由:path('settings')

<form action="{{ path('settings') }}" {{ form_enctype(form) }} method="POST" class="fos_user_change_password">
    {{ form_widget(form) }}
    <div>
        <input type="submit" value="{{ 'change_password.submit'|trans({}, 'FOSUserBundle') }}" />
    </div>
</form>

原来如此。现在您有了一个漂亮的密码更改表单,所有繁重的工作都由 FOS UserBundle 完成!

关于php - FOSUserBundle 将更改密码表单与其他表单集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12746865/

相关文章:

PHP:如何在 Poedit 中使用换行符

php - 是否可以使用 Bootstrap 的模态对话框、jQuery、AJAX 和 PHP 将图像上传到服务器?如果是如何?如果不是,原因是什么?

mysql - 具有多个时间间隔的重复日期的 Symfony3 实体设计

php - Symfony2/FOS 用户包 - 注册后记住我

PHP - MySQL IF( bool )条件

php - 仍在尝试将 PHP 数组传递给 foreach 循环内的 JQuery 函数(进入 Bootstrap3 模式)

symfony - Symfony 2 中多个帐户的 swiftmailer 配置

symfony - 无法在 Symfony2 中启用 SoftDeleteable - 无法识别的选项 "filters"

php - Symfony 更新架构时出现 FOSUserBundle 错误

java - 如何从java桌面应用程序中保存fos_user数据