使用 symfony2。我有一个监听器类试图从不同的类( Controller )调用方法,如下所示:
$authenticate = new AuthenticationController();
$authenticate->isTokenValid($token);
Controller 的 isTokenValid 方法:
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
如果我以正确的方式加载 Controller 方法(在 url 中使用路由),它工作正常。
最佳答案
Symfony2 使用依赖注入(inject)模式,你必须注入(inject)包含所有服务(如数据库连接)的容器:
$authenticate = new AuthenticationController();
$authenticate->setContainer($this->container);
$authenticate->isTokenValid($token);
当然我在这里假设你的监听类是 ContainerAware
[+] 要让您的监听器具有 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
然后在您的监听器类的构造函数中:
public function __construct($container = null){
$this->container = $container;
}
关于php - '调用非对象的成员函数 get()'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905191/