'在非对象上调用成员函数get()'?

Jon*_*atz 5 php symfony

使用symfony2.我有一个侦听器类,试图从不同的类(控制器)调用一个方法,如下所示:

        $authenticate = new AuthenticationController();
        $authenticate->isTokenValid($token);
Run Code Online (Sandbox Code Playgroud)

而控制器是toTokenValid方法:

public function isTokenValid($token) {

    $conn = $this->get('database_connection');
Run Code Online (Sandbox Code Playgroud)

抛出错误

Fatal error: Call to a member function get() on a non-object in /home/content/24/9254124/html/newsite/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 246
Run Code Online (Sandbox Code Playgroud)

如果我以正确的方式加载控制器方法(使用URL中的路由)它工作正常.

dev*_*ler 7

Symfony2使用依赖注入模式,您必须注入容纳所有服务的容器(如数据库连接):

$authenticate = new AuthenticationController();
$authenticate->setContainer($this->container);
$authenticate->isTokenValid($token);
Run Code Online (Sandbox Code Playgroud)

当然我在这里假设您的监听器类是 ContainerAware

[+]要使您的侦听器容器有意思,请传递@service_container给它(示例表单services.yml)

my.listener:
    class: ACME\MyBundle\ListenerController
    arguments: [ @service_container ]
    tags:
        - { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
    kernel.event_listener:
        event: kernel.controller
Run Code Online (Sandbox Code Playgroud)

然后在你的监听器类的构造函数中:

public function __construct($container = null){
    $this->container = $container;
}
Run Code Online (Sandbox Code Playgroud)