PHP/Symfony: 无法触发 FOSUserBundle 的事件
PHP/Symfony: Cannot trigger the event for FOSUserBundle
我在为 FOSUserBundle 订阅事件时遇到问题(我正在使用 this 教程)。
基本上,我试图在登录后将用户重定向到指定的路由。我做了一个class,和教程里的一样:
//src:src/AppBundle/EventsListener/LoginListener.php
namespace AppBundle\EventsListener;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class LoginListener implements EventSubscriberInterface
{
private $router;
public function __construct(UrlGeneratorInterface $router)
{
$this->router = $router;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::SECURITY_IMPLICIT_LOGIN => 'onSecurityImplicitLogin',
);
}
public function onSecurityImplicitLogin(FormEvent $event)
{
return $this->redirectToRoute('profile');
}
}
我的 services.yml 看起来像这样:
services:
login_listener:
class: AppBundle\EventsListener\LoginListener
arguments: ['@router']
tags:
- { name: 'kernel.event_subscriber' }
但它仍然将我重定向到“\”路径。有人可以帮我找出问题所在吗?此外,这真的是在此包中定义路由的唯一方法吗?
而且,顺便问一下,除了这个 "official docs",还有其他 resources/manuals 吗?我发现这本手册非常不清楚和粗糙。
谢谢关心!
为了这个简单的目的,您只需添加 security.yml
:
firewalls:
main:
form_login:
always_use_default_target_path: true
default_target_path: profile
我在为 FOSUserBundle 订阅事件时遇到问题(我正在使用 this 教程)。
基本上,我试图在登录后将用户重定向到指定的路由。我做了一个class,和教程里的一样:
//src:src/AppBundle/EventsListener/LoginListener.php
namespace AppBundle\EventsListener;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class LoginListener implements EventSubscriberInterface
{
private $router;
public function __construct(UrlGeneratorInterface $router)
{
$this->router = $router;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::SECURITY_IMPLICIT_LOGIN => 'onSecurityImplicitLogin',
);
}
public function onSecurityImplicitLogin(FormEvent $event)
{
return $this->redirectToRoute('profile');
}
}
我的 services.yml 看起来像这样:
services:
login_listener:
class: AppBundle\EventsListener\LoginListener
arguments: ['@router']
tags:
- { name: 'kernel.event_subscriber' }
但它仍然将我重定向到“\”路径。有人可以帮我找出问题所在吗?此外,这真的是在此包中定义路由的唯一方法吗?
而且,顺便问一下,除了这个 "official docs",还有其他 resources/manuals 吗?我发现这本手册非常不清楚和粗糙。
谢谢关心!
为了这个简单的目的,您只需添加 security.yml
:
firewalls:
main:
form_login:
always_use_default_target_path: true
default_target_path: profile