一般而言,您可以通過使用依賴注入訪問類似記錄器的服務,該類中的容器不會自動注入容器(即控制器和命令擴展ContainerAwareCommand)。
可能的注入類型是屬性注入,設置注入和構造注入。我的例子將覆蓋constructor injection。您首先需要爲您的班級創建服務。
假設YML配置的例子看起來是這樣的:
services:
your_service:
class: Vendor/YourBundle/NonControllerExtendingClass
arguments: ["@logger"] # inject logger service into constructor
在我的例子,如果它被稱爲作爲服務「記錄器」服務會自動在NonControllerExtendingClass注入。請確保你有這樣的事情在你的供應商/ YourBundle/NonControllerExtendingClass:
use Symfony\Component\HttpKernel\Log\LoggerInterface;
// ...
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
現在使用的記錄器在你的方法是這樣的:
public function someAction()
{
$this->logger->info('Im here');
}
,如果你打電話給你的類記錄器將只被注入作爲服務或手動注入記錄器。
// ... gets service from the container
$my_service = $this-container->get('your_service');
// ... manual injection
$logger = $this->container->get('logger');
// alternatively create a logger object yourself i.e. $logger = new Logger();
$my_service = new Vendor/YourBundle/NonControllerExtendingClass($logger);
如果你想跟蹤與記錄實體的變化,你應該使用主義事件監聽器或用戶。 在文檔章節 - How to Register Event Listeners and Subscribers中瞭解更多信息。
對於symfony 3, 使用此loger接口: Psr \ Log \ LoggerInterface – skonsoft