在PHP-DI中,has()函数不适用于文件中的定义

时间:2016-06-08 13:27:51

标签: php dependency-injection php-di

使用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,给定数组

感谢您的快速回复。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

如果 MyProject \ Users \ Handlers \ Permissions 类未完全解析

  

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

希望这有助于某人