Я использую 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']);
В качестве альтернативы я мог бы добраться до контейнера и получить массив, но это сделало бы функцию страницы зависимой от контейнера, чего следует избегать.
Вы не можете решить это только с помощью автопроводки. Вы должны написать немного конфигурации, чтобы внедрить ваш массив в классы, которые вам нужны: http://php-di.org/doc/php-definitions.html
Смотрите также здесь, чтобы прочитать, как настроить файл конфигурации с Slim и PHP-DI: http://php-di.org/doc/frameworks/slim.html#configuring-php-di
Мне нужно было использовать функцию вызова () контейнера. Как вы можете видеть в вопросе, есть также параметр «Preferences» для configView, однако мне не нужно было его передавать, контейнер сделал это для меня. Я не понял, как передать ему частичные наборы параметров, вот так, как массив во втором параметре call () примерно так:
$app->get('/userConfig', function (
Request $request,
Response $response
){
$myArray = ['Thing1','thing2','thing3'];
return $this->call(['UserConfig', 'configView'],[$request,$response,$myArray]);
});
Ключевая часть [$request,$response,$myArray]
и не требует КАЖДЫЙ ДРУГОЙ параметр. В моем примере есть только один, но у моего реального объекта было еще 5, я хотел знать, как избежать работы с другими параметрами, вот как …