如何解决EventListener中的错误?

时间:2014-05-07 14:52:07

标签: symfony event-listener

根据FOSuserBndle中的角色,我在重定向路径中遇到问题。问题在于:

  

FatalErrorException:错误:在a上调用成员函数generate()   ......中的非对象

这是事件监听器
   

namespace Register\UserBundle\EventListener;

///////////////////////////////




//////////////////////////////

use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\DependencyInjection\ContainerInterface;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Router;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Doctrine\Bundle\DoctrineBundle\Registry as Doctrine; // for Symfony 2.1.0+
// use Symfony\Bundle\DoctrineBundle\Registry as Doctrine; // for Symfony 2.0.x

/**
 * Custom login listener.
 */
class LoginListener
{
   protected $router;
    /** @var \Symfony\Component\Security\Core\SecurityContext */
    private $securityContext;

    /** @var \Doctrine\ORM\EntityManager */
    private $em;

    /**
     * Constructor
     * 
     * @param SecurityContext $securityContext
     * @param Doctrine        $doctrine
     */
    public function __construct( SecurityContext $securityContext, Doctrine $doctrine )
    {
        $this->securityContext = $securityContext;
        $this->em              = $doctrine->getEntityManager();


    }

    /**
     * Do the magic.
     * 
     * @param InteractiveLoginEvent $event
     */
    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
    {
        if ($this->securityContext->isGranted('ROLE_PATIENT')) {



 $response = new RedirectResponse($this->router->generate('demands'));            
     //this->redirect($this->generateUrl('home'));

        }

        if ($this->securityContext->isGranted('ROLE_THERAPIST')) {
            // user has logged in using remember_me cookie
             print_r("FFFFFFFFFFFFFTHERAPIST");
            die;
        }

        // do some other magic here
        $user = $event->getAuthenticationToken()->getUser();
        $type = $user->getType()->getId();
        print_r( $type);
            die;

        // ...
    }
}

1 个答案:

答案 0 :(得分:0)

似乎路由器没有注入你的监听器/服务。

听众课程:

...
use Symfony\Component\Routing\Router;

class LoginListener
{
    protected $container;
    protected $em;
    protected $router;

    public function __construct(ContainerInterface $container, EntityManager $em, Router $router)
    {
        $this->container = $container;
        $this->em = $em;
        $this->router = $router;
    }
    ...
}

服务声明:

my_bundle.my_listener:
    class: %my_bundle.my_listener.class%
    arguments: [ @service_container, @doctrine.orm.entity_manager, @router ]