【问题标题】:FOSUserBundle - Overriding Controller [duplicate]FOSUserBundle - 覆盖控制器 [重复]
【发布时间】:2015-10-08 23:01:03
【问题描述】:

我在尝试覆盖 FOSUserBundle 的 ResettingController 时遇到了一些(令人沮丧的)问题。

我已完全按照文档进行操作*。我不喜欢重写控制器或事件订阅 onResettingPasswordSucess...

这是我的控制器:

命名空间 AppBundle\Controller\Frontend;

use FOS\UserBundle\Model\UserInterface;
use FOS\UserBundle\Controller\ResettingController as BaseResettingController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;

class ResettingController extends BaseResettingController
{
    /**
     * {@inheritDoc}
     */
    public function requestAction()
    {
        return $this->render('FOSUserBundle:Resetting:request.html.twig');
    }

    /**
     * {@inheritDoc}
     */
    public function sendEmailAction(Request $request)
    {
        $username = $request->request->get('username');

        /** @var $user UserInterface */
        $user = $this->get('fos_user.user_manager')->findUserByUsernameOrEmail($username);

        if (null === $user) {
            return $this->render('FOSUserBundle:Resetting:request.html.twig', array(
                'invalid_username' => $username
            ));
        }

        if ($user->isPasswordRequestNonExpired($this->container->getParameter('fos_user.resetting.token_ttl'))) {
            return $this->render('FOSUserBundle:Resetting:passwordAlreadyRequested.html.twig');
        }

        if (null === $user->getConfirmationToken()) {
            /** @var $tokenGenerator \FOS\UserBundle\Util\TokenGeneratorInterface */
            $tokenGenerator = $this->get('fos_user.util.token_generator');
            $user->setConfirmationToken($tokenGenerator->generateToken());
        }

        $this->get('fos_user.mailer')->sendResettingEmailMessage($user);
        $user->setPasswordRequestedAt(new \DateTime());
        $this->get('fos_user.user_manager')->updateUser($user);

        return new RedirectResponse($this->generateUrl('fos_user_security_login',
            array('email' => $this->getObfuscatedEmail($user))
        ));
    }
}

我的 AppBundle 有这个:

<?php

namespace AppBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AppBundle extends Bundle
{
    /**
     * {@inheritDoc}
     */
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

连 PhpStorm 都告诉我...

但是父方法总是被调用?

我想要的只是当用户提交密码重置表单时,它会将他们重定向到带有 Flash 消息的登录页面。

你能发现什么吗?

最诚挚的问候 内森

【问题讨论】:

    标签: php symfony fosuserbundle overriding


    【解决方案1】:

    您是否忘记刷新缓存?

    PS:你用的是什么配色方案?挺好看的

    【讨论】:

    • 我做了,并一直调试 event.subscribe 标签,我的事件在那里,但它总是默认为 FOS 的事件。谢谢它是 SpacePeacock :) github.com/ShawnMcCool/PHPStorm-SpacePeacock
    • 谢谢。顺便说一句,在您的屏幕截图中,您显示 requestAction 已被覆盖,但您不希望 sendMailAction 被覆盖吗? (有点混乱)
    【解决方案2】:

    我想要的只是当用户提交密码重置表单时,它会将他们重定向到带有 Flash 消息的登录页面

    使用事件,它是您发布的正确方式。 Hooking into the controllers

    【讨论】:

    • 我也试过了,没有。我今晚会发布活动。
    猜你喜欢
    • 2020-11-11
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多