Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Symfony 2中使用简单bundle类中的容器_Php_Symfony - Fatal编程技术网

Php 在Symfony 2中使用简单bundle类中的容器

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

我在Symfony 2中的包中创建了一个简单的类:

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您是对的,在大多数情况下,需要服务的类(如著名的服务容器)应该是服务。