我正在尝试获得一个PHP-DI工作的基本示例,但是我很容易被卡在一个相当基本的示例中。我认为我在这里缺少一些简单的东西,但无法将其单独进行。
它没有识别loggerinterface类型的提示,但这是直接从示例中删除的,因此我不明白我在做什么错。
当我从服务签名中删除Loggerinterface时,该示例正常工作。
服务类:
<?php
namespace testServiceLayer;
class TestService extends BaseService{
public function __construct(PsrLogLoggerInterface $logger){}
}
?>
config.php
<?php
use MonologLogger;
return [
'TestService' => DIcreate(testServiceLayerTestService::class),
PsrLogLoggerInterface::class => DIfactory(function () {
$logger = new Logger('mylog');
return $logger;
}),
];
?>
用法:
<?php
$builder = new DIContainerBuilder();
$builder->addDefinitions('config.php');
$container = $builder->build();
$service = $container->get('TestService');
?>
例外:
object(di definition exception invalidDefinition(#115(7({
["消息":preected] => string(196("条目" TestService"不能为 已解决:__construct((的参数$ logger没有定义值或 可猜测的完整定义:对象( class = arkon servicelayer testservice 懒= false("
您正在使用create()
,如果您希望该条目自动使用,则需要使用autowire()
。
请参阅此文档。