1

使用 php 定义文件,我创建了这个定义

return [
'auth' => \DI\object('MyProject\Users\Handlers\Permissions')->lazy()
];

但是当我使用 has() 函数来检查定义是否存在时,即

$container->has('auth'); //this returns FALSE

但 get() 函数设法返回对象。

$container->get('auth') //returns the referenced object

编辑:应用程序有点复杂,所以不能把所有代码都放在这里,但它意味着绕过我在以这种方式实现定义时遇到的错误

$containerBuilder->addDefinitions([
'auth' => \DI\object('MyProject\Users\Handlers\Permissions')->lazy()
]);

错误是:

致命错误:未捕获的异常 'InvalidArgumentException' 带有消息 'ContainerBuilder::addDefinitions() 参数必须是字符串或实现 ChainableDefinitionSource,给定数组

感谢您及时的回复。

4

2 回答 2

0

鉴于您上次的编辑,您似乎仍在使用 PHP-DI 4。

添加数组的功能已添加到版本 5.0.0:https ://github.com/PHP-DI/PHP-DI/issues/218

于 2016-06-08T14:40:08.647 回答
0

作为附录,如果无法完全解析定义, has()函数将返回 FALSE 值。例如从我下面的例子:

$containerBuilder->addDefinitions([
'auth' => \DI\object('MyProject\Users\Handlers\Permissions')->lazy()
]);

如果MyProject\Users\Handlers\Permissions类没有完全解决

$container->has('auth') //这将返回一个 FALSE 布尔值

希望这可以帮助某人

于 2016-06-08T16:43:51.000 回答