PHP: как передать свойство объекта или отдельное значение из массива закрытию анонимной функции

0

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

$app = new \Slim\Slim();

$testMessage = 'This is a test';

$app->get('/hello', function () use ($testMessage) {
    echo $testMessage; //output: This is a test
});

Но я также пытаюсь использовать Pimple (Dependency Injection), который создает массив, который я могу ссылаться. Вместо того, чтобы передавать весь массив на мой маршрут, я предпочел бы передать только те объекты/службы, которые мне нужны (для более удобного кода). Например:

$app = new \Slim\Slim();

$container = new Container();

$container['test'] = function ($c) {
    return new Test();
};

$app->get('/hello', function () use ($container['test']) { //I get a syntax error on this line
    var_dump($container['test']);
});

Я мог бы "использовать" весь $container, но тогда я передаю все в контейнер на маршрут, даже если мне нужен только один объект. При попытке отладить это я обнаружил, что могу передать любую переменную, которая выглядит так: $simple которая может включать весь массив или объект, но я не могу использовать свойство объекта (значение $Test->value) или одно значение из массива ($array['value']), если я не добавлю дополнительный шаблон для переназначения этих значений следующим образом:

$Test = $container['test'];
$app->get('/hello', function () use ($Test) {
    var_dump($Test); //everything works fine
});

Но тогда я создаю дополнительные объекты из области моего маршрута, и это может стать беспорядочным, конечно.

Может ли кто-нибудь сказать мне, есть ли способ use $container['test'] в закрытии или предложить какие-либо советы?

Теги:

1 ответ

1

Я бы рекомендовал передать весь контейнерный объект. Это создает очень мало дополнительных накладных расходов (просто новая ссылка), и вы не создаете дополнительные переменные без пробела. Он также позволяет добавлять зависимости, если возникнет такая необходимость.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню