我是PHP-DI的新手,我真的不明白我错过了什么。
我有一个容器:
$definitonFile = __DIR__ . '/app/etc/di_config.php';
$containerBuilder = new DIContainerBuilder();
$containerBuilder->useAutowiring(true);
$containerBuilder->addDefinitions($definitonFile);
$container = $containerBuilder->build();
$container->call(["VendorMyTestClass", "getName"], []);
在定义文件中:
return [
'Logger' => DIautowire()->constructor('app.log'),
];
并MyTestClass
<?php
namespace Vendor;
use MonologLogger;
class MyTestClass
{
/**
* @var Logger
*/
private $logger;
public function __construct(Logger $logger)
{
$this->logger = $logger;
}
public function getName()
{
var_dump($this->logger);
}
}
由于某种原因,我收到此错误消息:
致命错误:未捕获的 DI\定义\异常\无效定义:无法解析条目">供应商\我的测试类":无法解析条目"Monolog\Logger":__construct(( 的参数$name没有定义或可猜测的值 完整定义:对象(类 = Monolog\Logger lazy = false __construct( $name = #未定义# $handlers = (默认值( 数组 ( ( $processors = (默认值( 数组 ( ( ( ( 完整定义: 对象 ( 类 = 供应商\我的测试类 懒惰 = 假 __construct( $logger =get(Monolog\Logger( ( ( 在/var/www/dmholding.lh/vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php 第 18 行
我正在完全按照文档中的内容进行操作。
有人可以看吗?
我没有看到正在定义的Logger
类。 请参阅 PHP-DI 文档中的此示例。
<?php
// config.php
use MonologLogger;
use MonologHandlerStreamHandler;
return [
// ...
PsrLogLoggerInterface::class => DIfactory(function () {
$logger = new Logger('mylog');
$fileHandler = new StreamHandler('path/to/your.log', Logger::DEBUG);
$fileHandler->setFormatter(new LineFormatter());
$logger->pushHandler($fileHandler);
return $logger;
}),
];
http://php-di.org/doc/best-practices.html#using-libraries
return [
'Logger' => DIautowire()->constructor('app.log'),
];
您将Logger
定义为类名,但似乎您实际注入的类是MonologLogger
。