PHP-DI表示在定义文件中设置时缺少参数
我是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
$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来做这件事。这里有一个例子