Class yii\web\Response

继承yii\web\Response » yii\base\Response » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/web/Response.php

Web Response 类表示一个 HTTP 响应.

它包含要发送到客户端的 $headers, $cookies$content. 它还控制 HTTP 状态码.

默认情况下, Response 在 yii\web\Application 中配置为应用程序组件. 你可以通过Yii::$app->response来访问该实例.

你可以通过在components下的应用程序配置中添加一个数组来修改其配置, 如以下示例所示:

'response' => [
    'format' => yii\web\Response::FORMAT_JSON,
    'charset' => 'UTF-8',
    // ...
]

有关 Response 的更多详细信息和使用信息, 请参阅 guide article on responses.

公共属性

隐藏继承的属性

属性类型描述定义在
$acceptMimeType string 为此响应选择的请求 ACCEPT 标头中的 MIME 类型(eg. yii\web\Response
$acceptParams array 选定的 MIME 类型 相关联的参数(eg. yii\web\Response
$behaviors yii\base\Behavior[] 附加到此组件的行为列表. 该属性是只读的. yii\base\Component
$charset string 文本响应的字符集. yii\web\Response
$content string 响应内容. yii\web\Response
$cookies yii\web\CookieCollection Cookie 集合. 该属性是只读的. yii\web\Response
$data mixed 原始响应数据. yii\web\Response
$downloadHeaders string 附件文件名称. 该属性是只写的. yii\web\Response
$exitStatus integer 退出状态码. yii\base\Response
$format string 响应格式. yii\web\Response
$formatters array 用于将数据转换为指定 $format 的响应内容的格式化程序. yii\web\Response
$headers yii\web\HeaderCollection 标头集合. 该属性是只读的. yii\web\Response
$httpStatuses array HTTP 状态码列表和相应的文本. yii\web\Response
$isClientError boolean 此响应是否指示客户端错误. 该属性是只读的. yii\web\Response
$isEmpty boolean 此响应是否为空. 该属性是只读的. yii\web\Response
$isForbidden boolean 此响应是否表明当前请求被禁止. 该属性是只读的. yii\web\Response
$isInformational boolean 此响应是否仅供参考. 该属性是只读的. yii\web\Response
$isInvalid boolean 此响应是否有一个有效的 $statusCode. 该属性是只读的. yii\web\Response
$isNotFound boolean 此响应是否指示找不到当前请求的资源. 该属性是只读的. yii\web\Response
$isOk boolean 此响应是否 OK. 该属性是只读的. yii\web\Response
$isRedirection boolean 此响应是否为重定向. 该属性是只读的. yii\web\Response
$isSent boolean 响应是否已发送. yii\web\Response
$isServerError boolean 此响应是否指示服务器错误. 该属性是只读的. yii\web\Response
$isSuccessful boolean 此响应是否成功. 该属性是只读的. yii\web\Response
$statusCode integer 与响应一起发送的 HTTP 状态码. yii\web\Response
$statusCodeByException Exception|\Error|\Throwable 异常对象. 该属性是只写的. yii\web\Response
$statusText string 与状态码一起的 HTTP 状态描述. yii\web\Response
$stream resource|array|callable 要发送的流. yii\web\Response
$version string 使用的 HTTP 协议版本. yii\web\Response

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的指定的方法. yii\base\Component
__clone() 在通过克隆现有对象创建对象之后调用此方法. yii\base\Component
__construct() 构造函数. yii\base\BaseObject
__get() 返回组件属性的值. yii\base\Component
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\Component
__set() 设置组件属性的值. yii\base\Component
__unset() 将组件属性设置为null. yii\base\Component
attachBehavior() 将行为附加到此组件. yii\base\Component
attachBehaviors() 将行为列表附加到组件. yii\base\Component
behaviors() 返回此组件应该具有的行为列表. yii\base\Component
canGetProperty() 返回一个值, 指示属性是否可读取. yii\base\Component
canSetProperty() 返回一个值, 指示属性是否可设置. yii\base\Component
className() 返回此类的完全限定名称. yii\base\BaseObject
clear() 清除响应的标头, Cookie, 内容和状态代码. yii\web\Response
clearOutputBuffers() 删除所有现有的输出缓冲区. yii\base\Response
detachBehavior() 从组件中分离一个行为. yii\base\Component
detachBehaviors() 分离组件中的所有行为. yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件. yii\base\Component
getBehavior() 返回指定的行为对象. yii\base\Component
getBehaviors() 返回附加到此组件的所有行为. yii\base\Component
getCookies() 返回 Cookie 集合. yii\web\Response
getHeaders() 返回标头集合. yii\web\Response
getIsClientError() 此响应是否指示客户端错误. yii\web\Response
getIsEmpty() 此回应是否为空. yii\web\Response
getIsForbidden() 此响应是否表明当前请求被禁止. yii\web\Response
getIsInformational() 此响应是否仅供参考. yii\web\Response
getIsInvalid() 此响应是否有一个有效的 $statusCode. yii\web\Response
getIsNotFound() 此响应指示是否未找到当前请求的资源. yii\web\Response
getIsOk() 此响应是否 OK. yii\web\Response
getIsRedirection() 此响应是否为重定向. yii\web\Response
getIsServerError() 此响应是否指示服务器错误. yii\web\Response
getIsSuccessful() 此响应是否成功. yii\web\Response
getStatusCode() 获取与响应一起发送的 HTTP 状态码. yii\web\Response
hasEventHandlers() 返回一个值, 指示是否有任何处理程序附加到指定的事件. yii\base\Component
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\Component
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\Component
init() 初始化此组件. yii\web\Response
off() 从该组件分离现有的事件处理程序. yii\base\Component
on() 将事件处理程序附加到事件. yii\base\Component
redirect() 将浏览器重定向到指定的 URL. yii\web\Response
refresh() 刷新当前页面. yii\web\Response
send() 将响应发送到客户端. yii\web\Response
sendContentAsFile() 将指定的内容作为文件发送到浏览器. yii\web\Response
sendFile() 将文件发送到浏览器. yii\web\Response
sendStreamAsFile() 将指定的流作为文件发送到浏览器. yii\web\Response
setDownloadHeaders() 为文件下载设置一组默认的 HTTP 标头集. yii\web\Response
setStatusCode() 设置响应状态码. yii\web\Response
setStatusCodeByException() 根据异常设置响应状态码. yii\web\Response
trigger() 触发事件. yii\base\Component
xSendFile() 使用 x-sendfile 将现有文件发送为浏览器下载. yii\web\Response

受保护的方法

隐藏继承的方法

方法描述定义在
defaultFormatters() 默认情况下支持的格式化程序. yii\web\Response
getDispositionHeaderValue() 返回可以在新旧浏览器中安全使用的 Content-Disposition 标头值. yii\web\Response
getHttpRange() 确定请求中给定的 HTTP 范围. yii\web\Response
prepare() 准备发送响应. yii\web\Response
sendContent() 将响应内容发送给客户端. yii\web\Response
sendCookies() 将 cookies 发送给客户端. yii\web\Response
sendHeaders() 将响应标头发送到客户端. yii\web\Response

事件

隐藏继承的事件

事件类型描述定义在
EVENT_AFTER_PREPARE yii\base\Event send() 中调用 prepare() 之后立即触发的事件. yii\web\Response
EVENT_AFTER_SEND yii\base\Event send() 结束时触发的事件. yii\web\Response
EVENT_BEFORE_SEND yii\base\Event send() 开始时触发的事件. yii\web\Response

常量

隐藏继承的常量

常量描述定义在
FORMAT_HTML 'html' yii\web\Response
FORMAT_JSON 'json' yii\web\Response
FORMAT_JSONP 'jsonp' yii\web\Response
FORMAT_RAW 'raw' yii\web\Response
FORMAT_XML 'xml' yii\web\Response

属性详情

$acceptMimeType public 属性

为此响应选择的请求 ACCEPT 标头中的 MIME 类型(eg. application/json). 该属性主要由 yii\filters\ContentNegotiator 设置.

public string $acceptMimeType null
$acceptParams public 属性

选定的 MIME 类型 相关联的参数(eg. ['q' => 1, 'version' => '1.0']). 这是 ACCEPT HTTP 标头中与 $acceptMimeType 相关联的 name-value 对的列表. 该属性主要由 yii\filters\ContentNegotiator 设置.

public array $acceptParams = []
$charset public 属性

文本响应的字符集. 如果未设置, 则将使用 yii\web\Application::$charset 的值.

public string $charset null
$content public 属性

响应内容. 如果 $data 不为null, 则在发送响应时, 它将根据 $format 转换为 $content.

参见 $data.

public string $content null
$cookies public 属性

Cookie 集合. 该属性是只读的.

$data public 属性

原始响应数据. 如果不为null, 则在发送响应时, 它将根据 $format 转换为 $content.

参见 $content.

public mixed $data null
$downloadHeaders public 属性

附件文件名称. 该属性是只写的.

public string $downloadHeaders null
$format public 属性

响应格式. 这决定了当未设置 $content 时如何将 $data 转换为 $content. 该属性的值必须是 $formatters 数组中声明的键之一. 默认情况下, 支持以下格式:

  • FORMAT_RAW: 无需进行任何转换, 数据将被视为响应内容. 不会添加额外的 HTTP 标头.
  • FORMAT_HTML: 无需进行任何转换, 数据将被视为响应内容. Content-Type标头将设置为text/html.
  • FORMAT_JSON: 数据将转换为 JSON 格式, 并且Content-Type标头将设置为application/json.
  • FORMAT_JSONP: 数据将转换为 JSONP 格式, 并且Content-Type头将设置为text/javascript.

    Note: 在这种情况下, $data必须是一个包含datacallback元素的数组. 前者是指要发送的实际数据, 而后者是指 JavaScript 回调的名称.

  • FORMAT_XML: 数据将转换为 XML 格式. 有关更多详细信息, 请参阅 yii\web\XmlResponseFormatter.

你可以通过配置 $formatters 来自定义格式化过程或支持其他格式.

参见 $formatters.

public string $format self::FORMAT_HTML
$formatters public 属性

用于将数据转换为指定 $format 的响应内容的格式化程序. 数组键是格式名称, 数组值是创建格式化程序对象的相应配置.

参见:

public array $formatters = []
$headers public 属性

标头集合. 该属性是只读的.

$httpStatuses public static 属性

HTTP 状态码列表和相应的文本.

public static array $httpStatuses = [100 => 'Continue'101 => 'Switching Protocols'102 => 'Processing'118 => 'Connection timed out'200 => 'OK'201 => 'Created'202 => 'Accepted'203 => 'Non-Authoritative'204 => 'No Content'205 => 'Reset Content'206 => 'Partial Content'207 => 'Multi-Status'208 => 'Already Reported'210 => 'Content Different'226 => 'IM Used'300 => 'Multiple Choices'301 => 'Moved Permanently'302 => 'Found'303 => 'See Other'304 => 'Not Modified'305 => 'Use Proxy'306 => 'Reserved'307 => 'Temporary Redirect'308 => 'Permanent Redirect'310 => 'Too many Redirect'400 => 'Bad Request'401 => 'Unauthorized'402 => 'Payment Required'403 => 'Forbidden'404 => 'Not Found'405 => 'Method Not Allowed'406 => 'Not Acceptable'407 => 'Proxy Authentication Required'408 => 'Request Time-out'409 => 'Conflict'410 => 'Gone'411 => 'Length Required'412 => 'Precondition Failed'413 => 'Request Entity Too Large'414 => 'Request-URI Too Long'415 => 'Unsupported Media Type'416 => 'Requested range unsatisfiable'417 => 'Expectation failed'418 => 'I\'m a teapot'421 => 'Misdirected Request'422 => 'Unprocessable entity'423 => 'Locked'424 => 'Method failure'425 => 'Unordered Collection'426 => 'Upgrade Required'428 => 'Precondition Required'429 => 'Too Many Requests'431 => 'Request Header Fields Too Large'449 => 'Retry With'450 => 'Blocked by Windows Parental Controls'451 => 'Unavailable For Legal Reasons'500 => 'Internal Server Error'501 => 'Not Implemented'502 => 'Bad Gateway or Proxy Error'503 => 'Service Unavailable'504 => 'Gateway Time-out'505 => 'HTTP Version not supported'507 => 'Insufficient storage'508 => 'Loop Detected'509 => 'Bandwidth Limit Exceeded'510 => 'Not Extended'511 => 'Network Authentication Required']
$isClientError public 属性

此响应是否指示客户端错误. 该属性是只读的.

public boolean $isClientError null
$isEmpty public 属性

此响应是否为空. 该属性是只读的.

public boolean $isEmpty null
$isForbidden public 属性

此响应是否表明当前请求被禁止. 该属性是只读的.

public boolean $isForbidden null
$isInformational public 属性

此响应是否仅供参考. 该属性是只读的.

public boolean $isInformational null
$isInvalid public 属性

此响应是否有一个有效的 $statusCode. 该属性是只读的.

public boolean $isInvalid null
$isNotFound public 属性

此响应是否指示找不到当前请求的资源. 该属性是只读的.

public boolean $isNotFound null
$isOk public 属性

此响应是否 OK. 该属性是只读的.

public boolean $isOk null
$isRedirection public 属性

此响应是否为重定向. 该属性是只读的.

public boolean $isRedirection null
$isSent public 属性

响应是否已发送. 如果为true, 则调用 send() 不会执行任何操作.

public boolean $isSent false
$isServerError public 属性

此响应是否指示服务器错误. 该属性是只读的.

public boolean $isServerError null
$isSuccessful public 属性

此响应是否成功. 该属性是只读的.

public boolean $isSuccessful null
$statusCode public 属性

与响应一起发送的 HTTP 状态码.

public integer $statusCode null
$statusCodeByException public 属性

异常对象. 该属性是只写的.

public Exception|\Error|\Throwable $statusCodeByException null
$statusText public 属性

与状态码一起的 HTTP 状态描述.

参见 $httpStatuses.

public string $statusText 'OK'
$stream public 属性

要发送的流. 这可以是流句柄或流句柄的数组, 开始位置和结束位置. 或者, 可以将其设置为可调用的, 该可调用的方法返回一个字符串数组(or yields), 该字符串数组应被回显并逐一清除.

Note: 当设置此属性后, send() 将忽略 $data$content 属性.

$version public 属性

使用的 HTTP 协议版本. 如果未设置, 则通过$_SERVER['SERVER_PROTOCOL']确定; 获取如果不可用, 使用1.1.

public string $version null

方法详情

clear() public 方法

清除响应的标头, Cookie, 内容和状态代码.

public void clear ( )
defaultFormatters() protected 方法

默认情况下支持的格式化程序.

protected array defaultFormatters ( )
return array

默认情况下支持的格式化程序.

getCookies() public 方法

返回 Cookie 集合.

通过返回的 Cookie 集合, 你可以如下添加或删除 Cookie:

// add a cookie
$response->cookies->add(new Cookie([
    'name' => $name,
    'value' => $value,
]);

// remove a cookie
$response->cookies->remove('name');
// 或者
unset($response->cookies['name']);
public yii\web\CookieCollection getCookies ( )
return yii\web\CookieCollection

Cookie 集合.

getDispositionHeaderValue() protected 方法 (可用自版本: 2.0.10)

返回可以在新旧浏览器中安全使用的 Content-Disposition 标头值.

备用名称:

  • 如果包含代码小于32或大于126的非 ASCII 字符, 则会导致问题.
  • 如果包含 urlencoded 字符(以%开头)或%字符, 则会导致问题. 某些浏览器将filename="X"解释为 urlencoded 名称, 有些则不然.
  • 如果包含路径分隔符如\/, 则会导致问题.
  • 由于 Value 是用"包装的, 所以应将其转义为\".
  • 由于输入可能包含非 ASCII 字符, 因此通过音译可以获得回退.

UTF 名称:

  • 如果包含路径分隔符如\/, 则会导致问题.
  • 由于标头仅为 ASCII, 因此应该是 urlencoded.
  • 如果它与备用名称完全匹配, 则可以省略.
protected string getDispositionHeaderValue ( $disposition, $attachmentName )
$disposition string
$attachmentName string
getHeaders() public 方法

返回标头集合.

标头集合包含当前注册的 HTTP 标头.

public yii\web\HeaderCollection getHeaders ( )
return yii\web\HeaderCollection

标头集合.

getHttpRange() protected 方法

确定请求中给定的 HTTP 范围.

protected array|boolean getHttpRange ( $fileSize )
$fileSize integer

用于验证请求的 HTTP 范围的文件的大小.

return array|boolean

范围(begin, end), 如果范围请求无效, 则为false.

getIsClientError() public 方法

此响应是否指示客户端错误.

public boolean getIsClientError ( )
return boolean

此响应是否指示客户端错误.

getIsEmpty() public 方法

此回应是否为空.

public boolean getIsEmpty ( )
return boolean

此回应是否为空.

getIsForbidden() public 方法

此响应是否表明当前请求被禁止.

public boolean getIsForbidden ( )
return boolean

此响应是否表明当前请求被禁止.

getIsInformational() public 方法

此响应是否仅供参考.

public boolean getIsInformational ( )
return boolean

此响应是否仅供参考.

getIsInvalid() public 方法

此响应是否有一个有效的 $statusCode.

public boolean getIsInvalid ( )
return boolean

此响应是否有一个有效的 $statusCode.

getIsNotFound() public 方法

此响应指示是否未找到当前请求的资源.

public boolean getIsNotFound ( )
return boolean

此响应指示是否未找到当前请求的资源.

getIsOk() public 方法

此响应是否 OK.

public boolean getIsOk ( )
return boolean

此响应是否 OK.

getIsRedirection() public 方法

此响应是否为重定向.

public boolean getIsRedirection ( )
return boolean

此响应是否为重定向.

getIsServerError() public 方法

此响应是否指示服务器错误.

public boolean getIsServerError ( )
return boolean

此响应是否指示服务器错误.

getIsSuccessful() public 方法

此响应是否成功.

public boolean getIsSuccessful ( )
return boolean

此响应是否成功.

getStatusCode() public 方法

获取与响应一起发送的 HTTP 状态码.

public integer getStatusCode ( )
return integer

与响应一起发送的 HTTP 状态码.

init() public 方法

初始化此组件.

public void init ( )
prepare() protected 方法

准备发送响应.

默认实现将 $data 转换为 $content 并相应地设置标头.

参见:

protected void prepare ( )
throws yii\base\InvalidConfigException

如果指定格式的格式化程序无效或 $format 不支持.

redirect() public 方法

将浏览器重定向到指定的 URL.

此方法将Location标头添加到当前响应.

Note: 它只有在调用 send() 时才会发出标头.

在控制器动作中, 你可以按以下方式使用此方法:

return Yii::$app->getResponse()->redirect($url);

在其它地方, 如果你想要立即发送Location标头, 则应使用以下代码:

Yii::$app->getResponse()->redirect($url)->send();
return;

在 AJAX 模式下, 除非有一些客户端 JavaScript 代码处理重定向, 否则这通常无法按预期工作. 为了帮助实现此目标, 此方法将发送X-Redirect标头而不是Location.

如果你使用"yii" JavaScript 模块, 它将如上所述处理 AJAX 重定向. 否则, 你应该编写以下 JavaScript 代码来处理重定向:

$document.ajaxComplete(function (event, xhr, settings) {
    var url = xhr && xhr.getResponseHeader('X-Redirect');
    if (url) {
        window.location = url;
    }
});
public $this redirect ( $url, $statusCode 302, $checkAjax true )
$url string|array

要重定向到的 URL. 可以采用以下格式之一:

  • 一个表示 URL 的字符串(e.g. "http://example.com")
  • 一个表示 URL 别名的字符串(e.g. "@example.com")
  • 一个数组格式为[$route, ...name-value pairs...] (e.g. ['site/index', 'ref' => 1]).

    Note: 路由是相对于整个应用程序, 而不是相对于控制器或模块. yii\helpers\Url::to() 将用于将数组转换为 URL.

以单个正斜杠/开头的任何相对 URL 都将通过在当前请求的主机信息之前添加一个绝对 URL 来转换为绝对 URL.

$statusCode integer

HTTP 状态码. 默认为302. 有关 HTTP 状态代码的详细信息, 请参阅 https://tools.ietf.org/html/rfc2616#section-10

$checkAjax boolean

是否专门处理 AJAX(和PJAX)请求. 默认为true, 表示如果当前请求是AJAX或PJAX请求, 则调用此方法将导致浏览器重定向到给定的 URL. 如果这是false, 将会发送一个Location头, 当接收到 AJAX/PJAX 响应时, 头可能不会导致浏览器重定向. 仅当请求标头X-Ie-Redirect-Compatibility不存在时才起作用.

return $this

响应对象本身.

refresh() public 方法

刷新当前页面.

此方法调用的效果与用户按下浏览器的刷新按钮(不重新发布数据)相同.

在控制器动作中, 你可以使用以下方法:

return Yii::$app->getResponse()->refresh();
public yii\web\Response refresh ( $anchor '' )
$anchor string

应该附加到重定向 URL 的锚. 默认为空, 如果想指定锚点, 请确保其以#开头.

return yii\web\Response

响应对象本身.

send() public 方法

将响应发送到客户端.

public void send ( )
sendContent() protected 方法

将响应内容发送给客户端.

protected void sendContent ( )
sendContentAsFile() public 方法

将指定的内容作为文件发送到浏览器.

Note: 此方法仅准备用于文件发送的响应. 在显示或隐式调用 send() 之前, 不会发送文件. 从控制器操作返回后, 完成后者.

参见 sendFile() for an example implementation.

public $this sendContentAsFile ( $content, $attachmentName, $options = [] )
$content string

要发送的内容. 现有的 $content 将被丢弃.

$attachmentName string

显示给用户的文件名.

$options array

发送文件的其他选项. 支持以下选项:

  • mimeType: 内容的 MIME 类型. 默认为application/octet-stream.
  • inline: boolean, 浏览器是否应在浏览器窗口中打开文件. 默认为false, 表示会弹出一个下载对话框.
return $this

响应对象本身.

throws yii\web\RangeNotSatisfiableHttpException

如果请求的范围不令人满意.

sendCookies() protected 方法

将 cookies 发送给客户端.

protected void sendCookies ( )
sendFile() public 方法

将文件发送到浏览器.

Note: 此方法仅准备用于文件发送的响应. 在显示或隐式调用 send() 之前, 不会发送文件. 从控制器动作返回后, 完成后者.

以下是控制器动作的示例实现, 该动作允许从无法从 Web 访问的目录请求文件:

public function actionFile($filename)
{
    $storagePath = Yii::getAlias('@app/files');

    // 检查允许的字符的文件名(不允许`../`以避免安全问题: 下载任意文件)
    if (!preg_match('/^[a-z0-9]+\.[a-z0-9]+$/i', $filename) || !is_file("$storagePath/$filename")) {
        throw new \yii\web\NotFoundHttpException('The file does not exists.');
    }
    return Yii::$app->response->sendFile("$storagePath/$filename", $filename);
}

参见:

public $this sendFile ( $filePath, $attachmentName null, $options = [] )
$filePath string

要发送的文件的路径.

$attachmentName string

显示给用户的文件名. 如果为null, 则由$filePath确定.

$options array

发送文件的其他选项. 支持以下选项:

  • mimeType: 内容的 MIME 类型. 如果未设置, 则将根据$filePath猜测.
  • inline: boolean, 浏览器是否应在浏览器窗口中打开文件. 默认为false, 表示会弹出一个下载对话框.
return $this

响应对象本身.

sendHeaders() protected 方法

将响应标头发送到客户端.

protected void sendHeaders ( )
sendStreamAsFile() public 方法

将指定的流作为文件发送到浏览器.

Note: 此方法仅准备用于文件发送的响应. 在显示或隐式调用 send() 之前, 不会发送文件. 从控制器动作返回后, 完成后者.

参见 sendFile() for an example implementation.

public $this sendStreamAsFile ( $handle, $attachmentName, $options = [] )
$handle resource

要发送的流的句柄.

$attachmentName string

显示给用户的文件名.

$options array

发送文件的其它选项. 支持以下选项:

  • mimeType: 内容的 MIME 类型. 默认为application/octet-stream.
  • inline: boolean, 浏览器是否应在浏览器窗口中打开文件. 默认为false, 表示会弹出一个下载对话框.
  • fileSize: 当知道内容的大小并且无法找到内容时, 这将很有用. 默认使用ftell()的内容大小. 该选项从版本2.0.4开始可用.
return $this

响应对象本身.

throws yii\web\RangeNotSatisfiableHttpException

如果请求的范围不令人满意.

setDownloadHeaders() public 方法

为文件下载设置一组默认的 HTTP 标头集.

public $this setDownloadHeaders ( $attachmentName, $mimeType null, $inline false, $contentLength null )
$attachmentName string

附件的文件名称.

$mimeType string

响应的 MIME 类型. 如果为null, 则不会设置Content-Type标头.

$inline boolean

浏览器是否应在浏览器窗口中打开文件. 默认为false, 表示会弹出一个下载对话框.

$contentLength integer

正在下载的文件的字节长度. 如果为null, 则不会设置Content-Length标头.

return $this

响应对象本身.

setStatusCode() public 方法

设置响应状态码.

如果$textnull, 则此方法将设置相应的状态文本.

public $this setStatusCode ( $value, $text null )
$value integer

状态码.

$text string

状态文本. 如果未设置, 它将根据状态码自动设置.

return $this

响应对象本身.

throws yii\base\InvalidArgumentException

如果状态码无效.

setStatusCodeByException() public 方法 (可用自版本: 2.0.12)

根据异常设置响应状态码.

public $this setStatusCodeByException ( $e )
$e Exception|\Error|\Throwable

异常对象.

return $this

响应对象本身.

throws yii\base\InvalidArgumentException

如果状态码无效.

xSendFile() public 方法

使用 x-sendfile 将现有文件发送为浏览器下载.

X-Sendfile 是一项功能, 它允许 Web 应用程序将对文件的请求重定向到 Web 服务器, 该 Web 服务器进而处理该请求. 从而无需执行诸如读取文件并将其发送给用户等任务. 当处理大量文件(或非常大的文件)时, 这可能会导致性能大大提高, 因为在 Web 服务器处理请求时允许 Web 应用程序提前终止.

该请求通过特殊的非标准 HTTP 标头发送到服务器. 当 Web 服务器遇到此类标头时, 它将丢弃所有输出, 并使用 Web 服务器内部组件(包括诸如缓存标头在内的所有优化)发送该标头指定的文件.

由于此标头指令是非标准的, 因此针对不同的 Web 服务器应用程序存在不同的指令:

因此, 要使此方法起工作, Web 服务器应启用 X-SENDFILE 选项/模块, 并应发送适当的 xHeader.

Note

此选项允许下载不在 Web 文件夹下的文件, 甚至下载诸如.htaccess之类的受其它保护(禁止所有)的文件.

Side effects(副作用)

如果 Web 服务器禁用了此选项, 则在调用此方法时, 将打开下载配置对话框, 但下载的文件将具有0个字节.

Known issues(已知的问题)

通过 SSL 连接使用 X-SENDFILE 时, IE6,7和8会出现一个错误, 它将显示如下错误消息: "Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found.". 你可以通过删除Pragma标头来解决此问题.

Example(示例)

Yii::$app->response->xSendFile('/home/user/Pictures/picture1.jpg');

参见 sendFile().

public $this xSendFile ( $filePath, $attachmentName null, $options = [] )
$filePath string

具有完整路径的文件名.

$attachmentName string

显示给用户的文件名. 如果为null, 则由$filePath确定.

$options array

发送文件的其它选项. 支持以下选项:

  • mimeType: 内容的 MIME 类型. 如果未设置, 则将根据$filePath猜测.
  • inline: boolean, 浏览器是否应在浏览器窗口中打开文件. 默认为false, 表示会弹出一个下载对话框.
  • xHeader: string, x-sendfile 标头的名称. 默认为X-Sendfile.
return $this

响应对象本身.

事件详情

EVENT_AFTER_PREPARE 事件类型 yii\base\Event

send() 中调用 prepare() 之后立即触发的事件. 你可以响应此事件, 以在将响应内容发送给客户端之前对其进行过滤.

EVENT_AFTER_SEND 事件类型 yii\base\Event

send() 结束时触发的事件.

EVENT_BEFORE_SEND 事件类型 yii\base\Event

send() 开始时触发的事件.