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



我是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

相关内容

  • 没有找到相关文章

最新更新