“在非对象上调用成员函数get()"? [英] 'Call to a member function get() on a non-object'?

查看:80
本文介绍了“在非对象上调用成员函数get()"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Using symfony2. I have a listener class that is attempting to call a method from a different class (a controller) like so:

        $authenticate = new AuthenticationController();
        $authenticate->isTokenValid($token);

控制器是isTokenValid方法:

And the controller isTokenValid method:

public function isTokenValid($token) {

    $conn = $this->get('database_connection');

抛出错误

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

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

If i load the controller method the proper way (using routing in the url) it works fine.

推荐答案

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

Symfony2 uses Dependency Injection pattern, you have to inject container that holds all services (like database connection):

$authenticate = new AuthenticationController();
$authenticate->setContainer($this->container);
$authenticate->isTokenValid($token);

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

Of course I assume here that your listener class is ContainerAware

[+]要使您的监听器ContainerAware,请将@service_container传递给它(示例形式services.yml)

[+] To make your listener ContainerAware, pass @service_container to it (example form 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

,然后在您的侦听器类的构造函数中:

and then in constructor of you listener class:

public function __construct($container = null){
    $this->container = $container;
}

这篇关于“在非对象上调用成员函数get()"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆