Php 在Symfony 2中使用简单bundle类中的容器
我在Symfony 2中的包中创建了一个简单的类:Php 在Symfony 2中使用简单bundle类中的容器,php,symfony,Php,Symfony,我在Symfony 2中的包中创建了一个简单的类: class MyTest { public function myFunction() { $logger = $this->get('logger'); $logger->err('testing out'); } } 如何访问容器?您需要注入服务容器。您的班级将如下所示: use Symfony\Component\DependencyInjection\ContainerInt
class MyTest {
public function myFunction() {
$logger = $this->get('logger');
$logger->err('testing out');
}
}
如何访问容器?您需要注入服务容器。您的班级将如下所示:
use Symfony\Component\DependencyInjection\ContainerInterface;
class MyTest
{
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function myFunction()
{
$logger = $this->container->get('logger');
$logger->err('testing out');
}
}
然后在控制器或ContainerWare实例中:
$myinstance = new MyTest($this->container);
如果您需要更多解释:为什么不只添加
@logger
服务?e、 g
arguments: [@logger]
如果要添加容器(不推荐),则可以在
services.yml
中添加@service\u container
,在大多数情况下,注入整个容器是个坏主意。分别注入所需的服务
namespace Vendor;
use Symfony\Component\HttpKernel\Log\LoggerInterface;
class MyTest
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function myFunction()
{
$logger->err('testing out');
}
}
在services.yml
中注册服务:
services:
my_test:
class: Vendor\MyTest
arguments: [@logger]
我无法注入容器,因为我正在创建的类是内核事件侦听器。注入整个容器在几乎所有情况下都是一个坏主意。@vinnylinux:事件侦听器可以注册为serviceTry adding。检查并使用@container这篇文章介绍如何创建一个可由控制器调用的服务,不是如何从我的类内部调用服务。在大多数情况下,您应该只注入所需的服务,而不是注入整个服务容器。@simshaun您是对的,在大多数情况下,需要服务的类(如著名的服务容器)应该是服务。