我创建了一个侦听器服务来侦听登录,以便我可以在登录后执行一些数据库操作。我正在尝试将另一个服务注入到我的侦听器中,但我得到一个致命错误:
可捕获致命错误:参数1传递给WX'ExchangeBundle'Service'SecurityListener::__construct()必须是WX'ExchangeBundle'Service'UserService的实例,none given
config.yml:
services:
wxexchange_user_service:
class: WX'ExchangeBundle'Service'UserService
arguments: [@doctrine.orm.default_entity_manager]
wxexchange_login_listener:
class: WX'ExchangeBundle'Service'SecurityListener
arguements: [@wxexchange_user_service]
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin }
SecurityListener:
namespace WX'ExchangeBundle'Service;
use Symfony'Component'Security'Http'Event'InteractiveLoginEvent;
use WX'ExchangeBundle'Service'UserService;
class SecurityListener
{
protected $userService;
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$lastLogin = new DateTime();
$user = $event->getAuthenticationToken()->getUser();
$this->userService->setLastLogin($user, $lastLogin);
}
}
我已经尝试清除缓存,但没有解决问题。
您的config.yml
有一个错别字:
arguements: [@wxexchange_user_service]
必须:arguments: [@wxexchange_user_service]
(注意参数中的"e")
因此,SecurityListener
在没有任何参数的情况下被实例化,但它需要一个类型为UserService
的对象。