как & quot; request- & gt; getBody & quot; работает в стройном

Если я сделаю пост, я могу получить контент, выполнив $payload = json_decode($app->request->getBody());

Но я не могу понять, как request->getBody работает в слим.

Во-первых, есть волшебный метод:

public function __get($name)
{
return $this->container->get($name);
}

Это вернет объект Slim \ Http \ Request. Это нормально сейчас.

$this->container это Slim \ Helper \ Set, и это функция get:

public function get($key, $default = null)
{
if ($this->has($key)) {
$isInvokable = is_object($this->data[$this->normalizeKey($key)]) && method_exists($this->data[$this->normalizeKey($key)], '__invoke');

return $isInvokable ? $this->data[$this->normalizeKey($key)]($this) : $this->data[$this->normalizeKey($key)];
}

return $default;
}

$this->data[$this->normalizeKey($key)] такой же как $this->data['request'], который является чем-то типа «Закрытие» (не уверен, чтобы понять это).

$isInvokable верно, так это называется:

$this->data[$this->normalizeKey($key)]($this)

Что делает эта линия? Почему ($this) (Slim \ Helper \ Set) в конце?

Особенно, почему следующая функция, которая будет вызвана, такова:

public function singleton($key, $value)
{
$this->set($key, function ($c) use ($value) {
static $object;

if (null === $object) {
$object = $value($c);
}

return $object;
});
}

Зачем singleton($key, $value) ?
Это никогда не называлось!
$ key не определен в начале функции. Кроме того, что делает $ c Slim \ Helper \ Set, а $ value замыканием?

И почему исполнение только static $object заставляет объект $ переходить из унифицированного в тип Slim \ Http \ Request?

1

Решение

Отказ от ответственности: я не знаком со Слимом. Я просто иду по тому, что вы написали.

Ну, то Set->get() метод испытаний, если значение в data массив свойств с ключом $key может быть вызван, а затем делает это, если это правда.

Так $this->data[$this->normalizeKey($key)]($this) вызывает метод с $this задается как параметр, а затем Set->get() возвращает возвращаемое значение этого метода.

Закрытие также часто называют «анонимная функция«, которая является новой функцией в PHP 5.3. Использование массива как переменная для вызова функции доступно с версии PHP 5.4.

Это позволяет вам передавать функции / методы как значения, что, вероятно, Отличительная черта в функциональное программирование.

0

Другие решения

Функция singleton вызывается раньше при инициализации.

Это установка всего $ key для функции.

Так, $this->data[$this->normalizeKey($key)]($this) это функция!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector