@semki096

Как обращаться к контейнеру в Slim PHP фреймворке, на примере из документации?

Пример из документации www.slimframework.com/docs/v3/concepts/di.html , добавляем услугу в контейнер, и здесь вроде бы понятно, получаем контейнер и создаем в нем наш обьект (поправьте пожалуйста если не так)
$container = $app->getContainer();
$container['myService'] = function ($container) {
    $myService = new MyService();
    return $myService;
};

А вот дальше не понял. "Вы можете получить услуги из вашего контейнера явно или неявно. Вы можете получить явную ссылку на экземпляр контейнера изнутри маршрута приложения Slim следующим образом:"
$app->get('/foo', function ($req, $res, $args) {
    $myService = $this->get('myService');
    return $res;
});

Каким образом? Буду признателен за разьяснение данного кода, не могу его понять.
  • Вопрос задан
  • 224 просмотра
Решения вопроса 2
wagoodoogoo
@wagoodoogoo
prestashop, webix, phalcon, vue, slim, craft cms
Один раз добавляете в контейнер свой объект, а потом в любом месте приложения можете вызывать его.
$container = $app->getContainer();
$container['myService'] = function ($container) {
    $myService = new MyService();
    $myService->code = 123;
    return $myService;
};


где-то в приложении:
$myService = $this->myService;
echo $myService->code; 
// выведется 123
Ответ написан
Minifets
@Minifets
Hello world!!!
Если интересно как это работает, то достаточно взглянуть в исходный код. Там есть такая строка:

if ($callable instanceof Closure) {
    $callable = $callable->bindTo($this->container);
}


Как работает bindTo можно посмотреть в документации.

P.S. Еще объяснения нужны или дальше сами разбeретесь?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы