Тонкий фреймворк, возвращающий ответ без ‘return $response’

#php #slim

#php #тонкий

Вопрос:

Я смущен тем, как Slim возвращает ответ без return $response в соответствии с документацией.

Если у меня есть следующий код:

 $app->get('/login', function ($request, $response, $args) {

    $response = $this->view->render($response, "login.php");
    return $response;  
});
  

Когда я вызываю /login через свой браузер, он отображает мой login.php шаблон, чего я и ожидал.

Но если я удалю, return $response это все еще работает, что кажется неправильным?

 $app->get('/login', function ($request, $response, $args) {

    $response = $this->view->render($response, "login.php"); 
});
  

Оба набора кода имеют одинаковый результат.

Как Slim показывает ответ, если $response он не возвращается?

Ответ №1:

Тело — это PsrHttpMessageStreamInterface , которое не является неизменяемым, когда вы добавляете что-то к телу, которое вы обычно делаете:

 $body = $response->getBody();
$body->write($string);
$body->write($string2);
  

Это изменяет содержимое потока, но все еще находится в том же $response объекте.

Поскольку средство визуализации представления только добавляет к телу, нет необходимости фактически возвращать $response .