2016-11-22 9 views
1

Я использую Slim Framework с PHP-DI для автозагрузки зависимостей для меня. Но одна зависимость - это просто регулярный массив. Если я поместил бы обычный массив в мою конфигурацию контейнера, тогда все массивы будут установлены в один массив. Поэтому мой основной вопрос:Добавление одной регулярной переменной в функцию автоподключения

Как мне вставить только одну переменную, разрешая контейнеру автоматически прокладывать остальные? Это возможно? Я нашел себя написание маршрут, как это:

$app->get('/userConfig', function (
    Request $request, 
    Response $response, 
    Preferences $prefs, 
    UserConfig $userconfig) 
{ 
    $myArray = ['Thing1','thing2','thing3']; 
    return $userconfig->configView($request, $response, $myArray, $prefs); 
}); 

В то время как все другие мои маршруты короткие, как это, потому что у них есть только зависимость от уникальных классов:

$app->get('/testPage', ['\Test','myTestPage']); 

я написал все, что дополнительный материал просто чтобы сжать $myArray в функцию configView, есть ли способ объединить регулярную инъекцию зависимостей с автоподготовкой? Имеет ли какая-либо инфраструктура или библиотека?

я мог бы просто написал это так, если мне не нужно, что один массив:

$app->get('/userConfig', ['\UserConfig','configView']); 

С другой стороны, я мог бы достичь в контейнер и получить массив, но это будет сделать страницу-функцию в зависимости от контейнера, чего следует избегать.

+0

Я добавил значения в контейнер. Но я не хочу вызывать контейнер изнутри класса, я хочу их вводить, вставляя контейнер и вызывая его, он победил бы цель DI и девиз: «Скажи, не спрашивай». – adjenks

ответ

0

мне нужен для использования функции call() контейнера. Как вы можете видеть в вопросе, есть также параметр «Предпочтения» для configView, однако мне не нужно было его пропускать, контейнер сделал это для меня. Я не понимаю, как передать его частичные наборы параметров, это как, как массив во втором параметре вызова() следующим образом:

$app->get('/userConfig', function (
     Request $request, 
     Response $response 
    ){ 
     $myArray = ['Thing1','thing2','thing3']; 
     return $this->call(['UserConfig', 'configView'],[$request,$response,$myArray]); 
    }); 

Ключевая часть будучи [$request,$response,$myArray] и не требующих каждый другой параметр , В моем примере есть только один, но у моего фактического объекта было еще 5, я хотел знать, как избежать других параметров, вот как ...

1

Вы не можете решить это только с помощью autowiring. Вы должны написать немного конфигурации, чтобы ввести ваш массив в классы, вам нужно: http://php-di.org/doc/php-definitions.html

Смотрите также здесь, чтобы прочитать, как настроить файл конфигурации с тонким и PHP-DI: http://php-di.org/doc/frameworks/slim.html#configuring-php-di

+0

Я понимаю, как добавить значения в контейнер. Проблема в том, что я хочу добавить «значения» в контейнер, а не «классы», но проблема в том, что вы не можете использовать тип hinting с «значениями», и вам нужно ввести тип, чтобы использовать autowiring. – adjenks

+0

@adjenks да, как я уже сказал **, вы не можете решить это только с помощью autowiring **. Вам нужно использовать конфигурацию, PHP-DI не может автоматически угадать, какой «строкой» или «массивом» вы хотите, если вы нарисуете «строка» или «массив». –

+0

Я понял. Использование call() позволило мне делать то, что я хотел. – adjenks

 Смежные вопросы

  • Нет связанных вопросов^_^