Если я сделаю пост, я могу получить контент, выполнив $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?
Отказ от ответственности: я не знаком со Слимом. Я просто иду по тому, что вы написали.
Ну, то Set->get()
метод испытаний, если значение в data
массив свойств с ключом $key
может быть вызван, а затем делает это, если это правда.
Так $this->data[$this->normalizeKey($key)]($this)
вызывает метод с $this
задается как параметр, а затем Set->get()
возвращает возвращаемое значение этого метода.
Закрытие также часто называют «анонимная функция«, которая является новой функцией в PHP 5.3. Использование массива как переменная для вызова функции доступно с версии PHP 5.4.
Это позволяет вам передавать функции / методы как значения, что, вероятно, Отличительная черта в функциональное программирование.
Функция singleton вызывается раньше при инициализации.
Это установка всего $ key для функции.
Так, $this->data[$this->normalizeKey($key)]($this)
это функция!