2.2 KiB
2.2 KiB
title |
---|
渲染页面 |
渲染页面
$response = $kernel->handle(
$request = Request::capture()
)->send();
这里只需要分析这一行代码,它将请求对象Request::capture()
捕获,并将其传递给内核对象$kernel->handle()
,然后将响应对象返回。
在Laravel
中,Request::capture()
方法会捕获当前的请求对象
send()方法
$response
是类Symfony\Component\HttpFoundation\Response
实例,在该类中可以找到send()
方法。
public function send()
{
// 发送http响应头
$this->sendHeaders();
// 发送http响应内容
$this->sendContent();
if (\function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
} elseif (\function_exists('litespeed_finish_request')) {
litespeed_finish_request();
} elseif (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true)) {
static::closeOutputBuffers(0, true);
flush();
}
return $this;
}
sendHeaders()方法
当类Symfony\Component\HttpFoundation\Response
实例化时,构造函数详细
public function __construct(?string $content = '', int $status = 200, array $headers = [])
{
$this->headers = new ResponseHeaderBag($headers);
$this->setContent($content);
$this->setStatusCode($status);
$this->setProtocolVersion('1.0');
}
public function sendHeaders()
{
// headers have already been sent by the developer
if (headers_sent()) {
return $this;
}
// 这里设置返回的响应头
foreach ($this->headers->allPreserveCaseWithoutCookies() as $name => $values) {
$replace = 0 === strcasecmp($name, 'Content-Type');
foreach ($values as $value) {
header($name.': '.$value, $replace, $this->statusCode);
}
}
// cookies
foreach ($this->headers->getCookies() as $cookie) {
header('Set-Cookie: '.$cookie, false, $this->statusCode);
}
// status
header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText), true, $this->statusCode);
return $this;
}
sendContent()方法
public function sendContent()
{
echo $this->content;
return $this;
}