Я смущен тем, как 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 не возвращается? 
  Тело – это Psr\Http\Message\StreamInterface которое не является неизменным, когда вы добавляете что-то в тело, которое вы обычно делаете: 
 $body = $response->getBody(); $body->write($string); $body->write($string2); 
  Это изменяет содержимое потока, но все еще находится в одном объекте $response -Object. 
  Поскольку рендеринг представления только добавляет к телу, нет необходимости фактически возвращать $response .