我是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);
}
}
由于某种原因,我收到此错误消息:
致命错误:未捕获的DI \ Definition \ Exception \ InvalidDefinition:无法解析条目“ Vendor \ MyTestClass”:无法解析条目“ Monolog \ Logger”:__construct()的参数$ name没有定义值或可猜测的完整定义:Object(class = Monolog \ Logger lazy = false __construct($ name =#UNDEFINED#$ handlers =(默认值)array()$ processors =(默认值)array()))完整定义:Object(class(class = Vendor \第18行的/var/www/dmholding.lh/vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php中的MyTestClass lazy = false __construct($ logger = get(Monolog \ Logger))) / p>
我的行为与documentation中的行为完全相同。
有人可以看吗?
答案 0 :(得分:0)
我没有看到定义的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;
}),
];
答案 1 :(得分:0)
return [
'Logger' => DI\autowire()->constructor('app.log'),
];
您将Logger
定义为类名,但实际上您实际插入的类是Monolog\Logger
。