我正在尝试将错误记录责任转移到我的类/实体。 目前获取记录器实例的唯一简洁方法是从我的控制器,然后将其传递给我的实体。
是否有一种干净的方法可以在我的班级或实体中获取记录器的实例?
同样适用于Entitymanager
编辑:setter注入:
services.yml
services:
my_test:
class: AppBundle\Entity\Test
arguments: ["@logger"]
calls:
- [setLogger, ["@logger"]]
DefaultController.php
$test = new Test();
$test->doLog();
我得到的错误是:
致命错误:在null
上调用成员函数error()
因为它没有调用setter
答案 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注入,所以参数键在这里是错误的。