2013-04-08 32 views

Trả lời

37

Nó có thể được thực hiện bằng cách tạo ra một thuê bao đặt:

namespace Acme\UserBundle\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; 

/** 
* Listener responsible to change the redirection at the end of the password resetting 
*/ 
class PasswordResettingListener implements EventSubscriberInterface { 
    private $router; 

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

    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)); 
    } 
} 

Và sau đó đăng ký nó như là một dịch vụ với kernel.event_subscriber tag:

# src/Acme/UserBundle/Resources/config/services.yml 
services: 
    acme_user.password_resetting: 
     class: Acme\UserBundle\EventListener\PasswordResettingListener 
     arguments: [ @router ] 
     tags: 
      - { name: kernel.event_subscriber } 
+4

Lưu ý: Giải pháp này yêu cầu bạn sử dụng phiên bản chính cho FOS Userbundle. Bạn có thể đạt được kết quả tương tự bằng cách mở rộng bộ điều khiển đặt lại và thay đổi phương thức getRedirectionUrl(). –

19

Trong trường hợp bạn không sử dụng giao diện FOS lý lịch thành viên , có một cách xấu xí nhưng đơn giản:

Thêm vào số app/config/routing.yml:

của bạn
fos_user_profile_show: 
    path: /yourpath 
+2

Bạn cũng có thể khai báo tuyến đường trong bộ điều khiển của riêng bạn với tên 'fos_user_profile_show', tốt hơn url tuyệt đối. –

+2

@LouTerrailloune không có url tuyệt đối trong cấu hình định tuyến ở trên. Nó có thể trông giống như nó nhưng nó aint –

Các vấn đề liên quan