簡體   English   中英

Symfony 2.8 FOSUserBundle重置密碼后更改重定向

[英]Symfony 2.8 FOSUserBundle Change the redirection after the password resetting

我正在遵循FOSUserbundle官方文檔 ,以便在密碼重置過程后更改重定向。 我創建了一個名為PasswordResettingListener的新類,並將其添加到services.yml。

該類最多可以執行getSubscribedEvents()方法,但是Symfony從未調用我執行重定向的特定方法。 我誤會了嗎?

src / AppBundle / EventListener / PasswordResettingListener.php:

<?php 
// src/AppBundle/EventListener/PasswordResettingListener.php

namespace AppBundle\EventListener;

use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

class PasswordResettingListener implements EventSubscriberInterface {
    private $router;

    public function __construct(UrlGeneratorInterface $router){
        $this->router = $router;
    }

    /**
    * CALLED!
    */
    public static function getSubscribedEvents() {
        return array(
        FOSUserEvents::RESETTING_RESET_SUCCESS => 'onPasswordResettingSuccess',
        );
    }

    public function onPasswordResettingSuccess(FormEvent $event) {
        die("alone"); //never called 
        $url = $this->router->generate('tarifs'); //nevercalled
        die("die alone !!!!!"); // never called 
        $event->setResponse(new RedirectResponse($url)); // ""
    }
}

該服務記錄在此處(/app/config/services.yml):#app / config / services.yml服務:

app.form.registration:
    class: AppBundle\Form\RegistrationType
    tags:
        - { name: form.type, alias: app_user_registration }

app.password_resetting:
    class: AppBundle\EventListener\PasswordResettingListener
    arguments: [@router]
    tags:
        - { name: kernel.event_subscriber }

src / AppBundle / EventListener / PasswordResettingListener.php:

use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
    use FOS\UserBundle\FOSUserEvents;
    use FOS\UserBundle\Event\FormEvent;
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    use Symfony\Component\HttpFoundation\RedirectResponse;
    use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;

    class PasswordResettingListener implements EventSubscriberInterface
    {
        private $router;
        private $security;

        public function __construct(UrlGeneratorInterface $router, AuthorizationChecker $security) {
            $this->router = $router;
            $this->security = $security;
        }

        public static function getSubscribedEvents() {
            return [
                FOSUserEvents::RESETTING_RESET_SUCCESS => 'onPasswordResettingSuccess',
            ];
        }


        public function onPasswordResettingSuccess(FormEvent $event) {
            $url = $this->router->generate('homepage');
            $event->setResponse(new RedirectResponse($url));
        }

    }

和app / config / services.yml服務:

  acme_user.password_resetting:
          class: src/AppBundle/EventListener/PasswordResettingListener
          arguments: [ "@router", "@security.authorization_checker" ]
          tags:
              - { name: kernel.event_subscriber }

您可以使用FOSUser的路由來更改重定向。 導入路線時,有兩種選擇:要么通過添加全部添加

fos_user: resource: "@FOSUserBundle/Resources/config/routing/all.xml"

或每個按路徑排列。 這是用於用戶個人資料的一個:

fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile

只需通過所需的路徑更改其前綴即可,僅此而已。

PS:我也嘗試使用事件監聽器,但沒有用。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM