2016-06-08 4 views
1

Использование файла определения PHP Я создал это определениеВ PHP-DI функция имеет() не работает для определения в файле

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

Но когда я использую функцию имеет(), чтобы проверить, существует определение т.е.

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

, но функция get() позволяет вернуть объект.

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

EDIT: приложение является немного сложным, так не могу поместить весь код здесь, но его имел в виду, чтобы обойти ошибку Im получаю, когда я реализовать подходы к определению таким образом

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

Ошибка:

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'ContainerBuilder::addDefinitions() parameter must be a string or implement ChainableDefinitionSource, array given

Спасибо за быстрый ответ.

+0

Это не нормально на самом деле, вы уверены, что конфиг правильно загружен? Не могли бы вы добавить больше кода (либо здесь, либо в проблему GitHub), чтобы я мог взглянуть на него? –

+0

@MatthieuNapoli Сделано редактирование на вопрос –

ответ

0

Учитывая последнее изменение, кажется, вы все еще используете PHP-DI 4.

Возможность добавлять массивы были добавлен в версию 5.0.0: https://github.com/PHP-DI/PHP-DI/issues/218

0

И в качестве дополнения, то имеет () функция возвращает значение FALSE, если определение не может быть полностью разрешено. Например, из моего примера ниже:

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

Если класс MyProject \ Users \ Хендлеры \ Permissions не полностью решены

$container->has('auth') //this will return a FALSE boolean value

Надежда это помогает кому-то