Проблема с вводом определенных параметров в конструктор с использованием PHP-DI

Это может показаться рудиментарным, но я не могу напрямую вводить какие-либо параметры в конструктор моего класса без использования аннотаций. Ниже приведено определение и класс называется

    $shell->set('root','[Root Definition Here]');

    $shell->make('Namespace\To\Product');

    Class Product{

          public function __construct($root){
               //coding continues here
          }
    }

Но я продолжаю получать эту ошибку

Неперехваченное исключение «Исключение» с сообщением «Запись «Пространство имен\Кому\Продукт» не может быть разрешена: параметр $root of __construct() не имеет значения, определенного или угадываемого

Однако эта проблема будет решена, если я буду использовать аннотации. Но я очень хочу не прибегать к аннотациям каждый раз, когда ввожу параметры.

В чем проблема?

Спасибо


person Stanley Ngumo    schedule 19.09.2016    source источник


Ответы (1)


PHP-DI внедряет, используя подсказки типов, а не имена параметров. Таким образом, это сработало бы, если бы $root имел подсказку типа (например, Foo\Bar $root), но сейчас это не может работать.

Вы должны определить параметр вручную:

$container->set(
    'Namespace\To\Product',
    DI\object()->constructor(DI\get('root')
);
person Matthieu Napoli    schedule 19.09.2016
comment
Хорошо, понял, но мои классы загружаются на лету, посмотрим, как здесь можно использовать подстановочные знаки. Спасибо - person Stanley Ngumo; 19.09.2016