Если я пост, я могу получить содержимое, делая $payload = json_decode($app->request->getBody());
как «request-> getBody» работает в тонком
Но я не могу понять, как request->getBody
работает в стройной.
Во-первых, есть магический метод:
public function __get($name)
{
return $this->container->get($name);
}
Это вернет Слим \ Http \ объект запроса. Сейчас все в порядке.
$this->container
является Слим \ Helper \ Set, и это функция прибудет:
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)
? Его никогда не называли! $ ключ не задан в начале функции. Также, что делает $ c Slim \ Helper \ Set и $ value закрытием?
И почему выполнение только static $object
заставляет объект $ переходить от унификации к одному из типов Slim \ Http \ Request?