внедрение зависимости — в PHP-DI функция has () не работает для определения в файле

Используя файл определения 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, заданный массив

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

1

Решение

С учетом вашего последнего редактирования кажется, что вы все еще используете 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’) // это вернет логическое значение FALSE

Надеюсь, это поможет кому-то

0

По вопросам рекламы [email protected]