php - '调用非对象的成员函数 get()'?

标签 php symfony

使用 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/

相关文章:

php - 如何在 php 的 mysql 查询中使用占位符

php - Symfony/ Twig : How to change the money_pattern?

php - Symfony 功能测试 - 如何使用请求模拟 Controller 注入(inject)的服务(提交)

php - 如何通过 SyliusResourceBundle 使用 Sylius 创建新模型

doctrine-orm - 在 symfony 3 中自动更新createdAt和updatedAt字段(原则)

php - 使用它的 id 设置 Symfony2 实体表单字段

php - 为什么我不能在 Symfony 2 中创建 cookie?

php - 我应该使用什么作为访客标识符?

php - AJAX 将西里尔字母转换为某种编码

php - WordPress $wpdb->选项