Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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-DI表示在定义文件中设置时缺少参数_Php_Php Di - Fatal编程技术网

PHP-DI表示在定义文件中设置时缺少参数

PHP-DI表示在定义文件中设置时缺少参数,php,php-di,Php,Php Di,我是PHP-DI新手,我真的不明白我错过了什么 我有一个容器: $definitonFile = __DIR__ . '/app/etc/di_config.php'; $containerBuilder = new \DI\ContainerBuilder(); $containerBuilder->useAutowiring(true); $containerBuilder->addDefinitions($definitonFile); $container = $conta

我是PHP-DI新手,我真的不明白我错过了什么

我有一个容器:

$definitonFile = __DIR__ . '/app/etc/di_config.php';

$containerBuilder = new \DI\ContainerBuilder();
$containerBuilder->useAutowiring(true);
$containerBuilder->addDefinitions($definitonFile);
$container = $containerBuilder->build();
$container->call(["Vendor\MyTestClass", "getName"], []);
在定义文件中:

return [
  'Logger' => DI\autowire()->constructor('app.log'),
];
并在
MyTestClass

<?php

namespace Vendor;

use Monolog\Logger;

class MyTestClass
{
    /**
     * @var Logger
     */
    private $logger;

    public function __construct(Logger $logger)
    {
        $this->logger = $logger;
    }

    public function getName()
    {
        var_dump($this->logger);
    }

}

我看不到正在定义
记录器
类。请参阅PHP-DI文档中的此示例

<?php
// config.php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

return [
    // ...

    Psr\Log\LoggerInterface::class => DI\factory(function () {
        $logger = new Logger('mylog');

        $fileHandler = new StreamHandler('path/to/your.log', Logger::DEBUG);
        $fileHandler->setFormatter(new LineFormatter());
        $logger->pushHandler($fileHandler);

        return $logger;
    }),
];

我看不到正在定义
记录器
类。请参阅PHP-DI文档中的此示例

<?php
// config.php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

return [
    // ...

    Psr\Log\LoggerInterface::class => DI\factory(function () {
        $logger = new Logger('mylog');

        $fileHandler = new StreamHandler('path/to/your.log', Logger::DEBUG);
        $fileHandler->setFormatter(new LineFormatter());
        $logger->pushHandler($fileHandler);

        return $logger;
    }),
];
返回[
'Logger'=>DI\autowire()->构造函数('app.log'),
];
您将
Logger
定义为类名,但实际注入的类似乎是
Monolog\Logger

return[
'Logger'=>DI\autowire()->构造函数('app.log'),
];

您将
Logger
定义为类名,但您实际注入的类似乎是
Monolog\Logger

我对此只有一个问题。现在它位于
Psr\Log\LoggerInterface
上,因此所有记录器都将使用此配置。我可以定义不止一个吗?例如,我想登录到另一个文件或另一个频道。如果你想让我问另一个问题,请告诉我。你应该可以用StreamHandler来做这件事。这是一个例子,我对此只有一个问题。现在它位于
Psr\Log\LoggerInterface
上,因此所有记录器都将使用此配置。我可以定义不止一个吗?例如,我想登录到另一个文件或另一个频道。如果你想让我问另一个问题,请告诉我。你应该可以用StreamHandler来做这件事。这里有一个例子