在类或实体内部进行记录

时间:2016-03-24 09:03:06

标签: logging symfony

我正在尝试将错误记录责任转移到我的类/实体。 目前获取记录器实例的唯一简洁方法是从我的控制器,然后将其传递给我的实体。

是否有一种干净的方法可以在我的班级或实体中获取记录器的实例?

同样适用于Entitymanager

编辑:setter注入:

  • test.php的

enter image description here

  • services.yml

    services:
        my_test:
            class: AppBundle\Entity\Test        
            arguments: ["@logger"]
            calls:
                 - [setLogger, ["@logger"]]
    
  • DefaultController.php

    $test = new Test();
    $test->doLog();
    

我得到的错误是:

  

致命错误:在null

上调用成员函数error()

因为它没有调用setter

1 个答案:

答案 0 :(得分:1)

如果您将班级定义为服务,则不得自行调用构造函数。服务容器将关心构造对象。

相反,你必须得到这样的记录器(假设你想在控制器中得到它):

class MyController extends Controller {

    public function someAction() {
        // ...
        $test = $this->get('my_test');
        $test->doLog();
        // ...
    }
}

您也可以使用正确的服务定义:

services:
    my_test:
        class: AppBundle\Entity\Test        
        calls:
             - [setLogger, ["@logger"]]

arguments键用于将参数传递给类的构造函数。但是你使用的是setter注入,所以参数键在这里是错误的。