类 yii\web\Request
继承关系 | yii\web\Request » yii\base\Request » yii\base\Component » yii\base\BaseObject |
---|---|
实现接口 | yii\base\Configurable |
可用版本 | 2.0 |
源代码 | https://github.com/yiisoft/yii2/blob/master/framework/web/Request.php |
Web 请求类表示一个 HTTP 请求。
它封装了 $_SERVER 变量并解决了不同 Web 服务器之间的不一致性。此外,它还提供了一个接口,用于从 $_POST、$_GET、$_COOKIES 和通过其他 HTTP 方法(如 PUT 或 DELETE)发送的 REST 参数中检索请求参数。
Request 默认情况下在 yii\web\Application 中配置为应用程序组件。您可以通过 Yii::$app->request
访问该实例。
有关 Request 的更多详细信息和使用信息,请参阅 关于请求的指南文章。
公共属性
公共方法
受保护的方法
方法 | 描述 | 定义于 |
---|---|---|
createCsrfCookie() | 创建包含随机生成的 CSRF 令牌的 Cookie。 | yii\web\Request |
filterHeaders() | 根据 $trustedHosts 过滤标头。 | yii\web\Request |
generateCsrfToken() | 生成用于执行 CSRF 验证的未掩码随机令牌。 | yii\web\Request |
getIpValidator() | 创建 yii\validators\IpValidator 的实例。 | yii\web\Request |
getSecureForwardedHeaderParts() | 返回解码的转发标头 | yii\web\Request |
getSecureForwardedHeaderTrustedPart() | 获取令牌的第一个 Forwarded 标头值 |
yii\web\Request |
getSecureForwardedHeaderTrustedParts() | 仅获取受信任的 Forwarded 标头部分 |
yii\web\Request |
getTrustedHeaders() | 根据 $trustedHosts 获取受信任的标头。 | yii\web\Request |
getUserIpFromIpHeader() | 从 IP 标头返回用户 IP。 | yii\web\Request |
getUserIpFromIpHeaders() | 从 $ipHeaders 返回用户 IP 地址。 | yii\web\Request |
loadCookies() | 将 $_COOKIE 转换为 yii\web\Cookie 数组。 |
yii\web\Request |
loadCsrfToken() | 从 Cookie 或会话中加载 CSRF 令牌。 | yii\web\Request |
resolvePathInfo() | 解析当前请求 URL 的路径信息部分。 | yii\web\Request |
resolveRequestUri() | 解析当前请求 URL 的请求 URI 部分。 | yii\web\Request |
常量
常量 | 值 | 描述 | 定义于 |
---|---|---|---|
CSRF_HEADER | 'X-CSRF-Token' | 发送 CSRF 令牌的 HTTP 标头的名称。 | yii\web\Request |
CSRF_MASK_LENGTH | 8 | CSRF 令牌掩码的长度。** 自 2.0.12 版起已弃用。掩码长度现在等于令牌长度。** | yii\web\Request |
属性详细信息
按质量得分排序的内容类型。得分最高的类型将首先返回。数组键是内容类型,而数组值是相应的质量得分以及标头中给出的其他参数。
包含两个元素:- 0: 通过 HTTP 身份验证发送的用户名,如果未提供用户名则为 null
- 1: 通过 HTTP 身份验证发送的密码,如果未提供密码则为 null
。
创建 CSRF Cookie 的配置。此属性仅在 $enableCsrfValidation 和 $enableCsrfCookie 都为 true 时使用。
用于防止 CSRF 的令牌名称。默认为 '_csrf'。此属性仅在 $enableCsrfValidation 为 true 时使用。
浏览器通过 CSRF_HEADER 发送的 CSRF 令牌。如果没有发送此类标头,则返回 Null。
是否应验证 Cookie 以确保它们未被篡改。默认为 true。
是否使用 Cookie 持久化 CSRF 令牌。如果为 false,则 CSRF 令牌将存储在会话中,名称为 $csrfParam。请注意,虽然在会话中存储 CSRF 令牌可以提高安全性,但它需要为每个页面启动一个会话,这会降低网站性能。
是否启用 CSRF(跨站点请求伪造)验证。默认为 true。启用 CSRF 验证后,提交到 Yii Web 应用程序的表单必须来自同一应用程序。否则,将引发 400 HTTP 异常。
注意,此功能要求用户客户端接受 cookie。此外,要使用此功能,通过 POST 方法提交的表单必须包含一个隐藏的输入,其名称由 $csrfParam 指定。您可以使用 yii\helpers\Html::beginForm() 生成此隐藏输入。
在 JavaScript 中,您可以分别通过 yii.getCsrfParam()
和 yii.getCsrfToken()
获取 $csrfParam 和 $csrfToken 的值。yii\web\YiiAsset 资产必须已注册。您还需要使用 yii\helpers\Html::csrfMetaTags() 在页面中包含 CSRF 元标记。
另请参阅
请求 URL 的方案和主机名部分(如果需要,包含端口号)(例如 https://yiiframework.cn
),如果无法从 $_SERVER
中获取并且未设置,则为 null。有关此属性的安全相关说明,请参阅 getHostInfo()。
代理存储真实客户端 IP 的标头列表。不建议在此处放置不安全的标头。要根据 RFC 7239 使用 Forwarded
标头,必须将该标头添加到 $secureHeaders 列表中。标头名称的匹配不区分大小写。
另请参阅
用于指示请求是否为通过 POST 隧道传输的 PUT、PATCH 或 DELETE 请求的 POST 参数名称。默认为 '_method'。
另请参阅
用于将原始 HTTP 请求正文转换为 $bodyParams 的解析器。数组键是请求的 Content-Types
,数组值是 创建解析器对象 的相应配置。解析器必须实现 yii\web\RequestParserInterface。
要启用对 JSON 请求的解析,可以使用 yii\web\JsonParser 类,如下例所示
[
'application/json' => 'yii\web\JsonParser',
]
要注册一个解析所有请求类型的解析器,可以使用 '*'
作为数组键。如果没有任何其他类型匹配,则将使用此解析器作为后备。
另请参阅 getBodyParams()。
代理服务器存储真实请求端口的标头列表。不建议在此处放置不安全的标头。要使用 Forwarded Port
,必须将其添加到 $secureHeaders 列表中。标头名称的匹配不区分大小写。
另请参阅
默认情况下,受信任主机配置影响的标头列表。除非在 $trustedHosts 中显式允许,否则这些标头将被过滤。如果列表包含 Forwarded
标头,则将根据 RFC 7239 进行处理。标头名称的匹配不区分大小写。
另请参阅
'X-Forwarded-For',
'X-Forwarded-Host',
'X-Forwarded-Proto',
'X-Forwarded-Port',
'Front-End-Https',
'X-Rewrite-Url',
'X-Original-Host',
]
用于检查连接是否通过 HTTPS 建立的标头列表。数组键是标头名称,数组值是指示安全连接的标头值列表。标头名称和值的匹配不区分大小写。不建议在此处放置不安全的标头。
另请参阅
'X-Forwarded-Proto' => [
'https',
],
'Front-End-Https' => [
'on',
],
]
受信任安全相关标头的配置。
数组键是用于匹配客户端的 CIDR 表示法的 IPv4 或 IPv6 IP 地址。
数组值是要信任的标头列表。这些将与 $secureHeaders 匹配,以确定允许指定主机发送哪些标头。标头名称的大小写必须与 $secureHeaders 中指定的一致。
例如,要信任 $secureHeaders 中列出的所有标头,用于 192.168.0.0-192.168.0.254
范围内的 IP 地址,请编写以下内容
[
'192.168.0.0/24',
]
要仅信任来自 10.0.0.1
的 X-Forwarded-For
标头,请使用
[
'10.0.0.1' => ['X-Forwarded-For']
]
默认情况下,信任来自所有主机的所有标头,除了 $secureHeaders 中列出的标头。匹配将按顺序尝试,并在 IP 匹配时停止搜索。
信息:匹配使用 yii\validators\IpValidator 执行。有关高级匹配,请参阅 IpValidator::::setRanges() 和 yii\validators\IpValidator::$networks。
另请参阅 $secureHeaders。
方法详情
定义于: yii\base\Component::__call()
调用不是类方法的命名方法。
此方法将检查任何附加的行为是否具有指定名称的方法,如果可用则执行它。
不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用。
public mixed __call ( $name, $params ) | ||
$name | string |
方法名 |
$params | array |
方法参数 |
返回值 | mixed |
方法返回值 |
---|---|---|
抛出异常 | yii\base\UnknownMethodException |
调用未知方法时 |
public function __call($name, $params)
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $object) {
if ($object->hasMethod($name)) {
return call_user_func_array([$object, $name], $params);
}
}
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
public void __clone ( ) |
public function __clone()
{
$this->_events = [];
$this->_eventWildcards = [];
$this->_behaviors = null;
}
定义于: yii\base\BaseObject::__construct()
构造函数。
默认实现执行两件事
- 使用给定的配置
$config
初始化对象。 - 调用 init()。
如果此方法在子类中被覆盖,建议
- 构造函数的最后一个参数是一个配置数组,就像这里的
$config
一样。 - 在构造函数的末尾调用父类的实现。
public void __construct ( $config = [] ) | ||
$config | array |
将用于初始化对象属性的名称-值对 |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
定义于: yii\base\Component::__get()
返回组件属性的值。
此方法将按照以下顺序检查并相应地采取措施
- 由 getter 定义的属性:返回 getter 的结果
- 行为的属性:返回行为属性的值
不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $component->property;
时会隐式调用。
另请参阅 __set()。
public mixed __get ( $name ) | ||
$name | string |
属性名称 |
返回值 | mixed |
属性值或行为属性的值 |
---|---|---|
抛出异常 | yii\base\UnknownPropertyException |
如果未定义属性 |
抛出异常 | yii\base\InvalidCallException |
如果属性为只写。 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
// read property, e.g. getName()
return $this->$getter();
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name;
}
}
if (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
定义于: yii\base\Component::__isset()
检查属性是否已设置,即定义且不为 null。
此方法将按照以下顺序检查并相应地采取措施
- 由 setter 定义的属性:返回属性是否已设置
- 行为的属性:返回属性是否已设置
- 对于不存在的属性返回
false
不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($component->property)
时会隐式调用。
public boolean __isset ( $name ) | ||
$name | string |
属性名称或事件名称 |
返回值 | boolean |
指定的属性是否已设置 |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name !== null;
}
}
return false;
}
定义于: yii\base\Component::__set()
设置组件属性的值。
此方法将按照以下顺序检查并相应地采取措施
- 由 setter 定义的属性:设置属性值
- "on xyz" 格式的事件:将处理程序附加到 "xyz" 事件
- "as xyz" 格式的行为:附加名为 "xyz" 的行为
- 行为的属性:设置行为属性的值
不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $component->property = $value;
时会隐式调用。
另请参阅 __get()。
public void __set ( $name, $value ) | ||
$name | string |
属性名称或事件名称 |
$value | mixed |
属性值 |
抛出异常 | yii\base\UnknownPropertyException |
如果未定义属性 |
---|---|---|
抛出异常 | yii\base\InvalidCallException |
如果属性为只读。 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
// set property
$this->$setter($value);
return;
} elseif (strncmp($name, 'on ', 3) === 0) {
// on event: attach event handler
$this->on(trim(substr($name, 3)), $value);
return;
} elseif (strncmp($name, 'as ', 3) === 0) {
// as behavior: attach behavior
$name = trim(substr($name, 3));
$this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = $value;
return;
}
}
if (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
定义于: yii\base\Component::__unset()
将组件属性设置为 null。
此方法将按照以下顺序检查并相应地采取措施
- 由 setter 定义的属性:将属性值设置为 null
- 行为的属性:将属性值设置为 null
不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 unset($component->property)
时会隐式调用。
public void __unset ( $name ) | ||
$name | string |
属性名称 |
抛出异常 | yii\base\InvalidCallException |
如果属性为只读。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = null;
return;
}
}
throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}
定义于: yii\base\Component::attachBehavior()
将行为附加到此组件。
此方法将根据给定的配置创建行为对象。之后,行为对象将通过调用 yii\base\Behavior::attach() 方法附加到此组件。
另请参阅 detachBehavior()。
public yii\base\Behavior attachBehavior ( $name, $behavior ) | ||
$name | string |
行为的名称。 |
$behavior | string|array|yii\base\Behavior |
行为配置。可以是以下之一
|
返回值 | yii\base\Behavior |
行为对象 |
---|
public function attachBehavior($name, $behavior)
{
$this->ensureBehaviors();
return $this->attachBehaviorInternal($name, $behavior);
}
定义于: yii\base\Component::attachBehaviors()
将行为列表附加到组件。
每个行为都由其名称索引,并且应该是一个 yii\base\Behavior 对象、指定行为类的字符串或用于创建行为的配置数组。
另请参阅 attachBehavior()。
public void attachBehaviors ( $behaviors ) | ||
$behaviors | array |
要附加到组件的行为列表 |
public function attachBehaviors($behaviors)
{
$this->ensureBehaviors();
foreach ($behaviors as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
定义于: yii\base\Component::behaviors()
返回此组件应具有的行为列表。
子类可以重写此方法来指定它们希望表现出的行为。
此方法的返回值应为行为对象或配置的数组,并以行为名称为索引。行为配置可以是指定行为类的字符串,也可以是以下结构的数组
'behaviorName' => [
'class' => 'BehaviorClass',
'property1' => 'value1',
'property2' => 'value2',
]
请注意,行为类必须扩展自 yii\base\Behavior。行为可以使用名称或匿名方式附加。当使用名称作为数组键时,可以使用此名称,稍后可以使用 getBehavior() 获取行为,或使用 detachBehavior() 分离行为。匿名行为无法检索或分离。
此方法中声明的行为将自动附加到组件(按需)。
public 数组 behaviors ( ) | ||
返回值 | array |
行为配置。 |
---|
public function behaviors()
{
return [];
}
定义于: yii\base\Component::canGetProperty()
返回一个值,指示是否可以读取属性。
如果满足以下条件,则可以读取属性
- 该类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
- 该类具有与指定名称相同的成员变量(当
$checkVars
为 true 时); - 附加的行为具有给定名称的可读属性(当
$checkBehaviors
为 true 时)。
另请参阅 canSetProperty()。
public 布尔值 canGetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
属性名称 |
$checkVars | boolean |
是否将成员变量视为属性 |
$checkBehaviors | boolean |
是否将行为的属性视为此组件的属性 |
返回值 | boolean |
属性是否可读 |
---|
public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
定义于: yii\base\Component::canSetProperty()
返回一个值,指示是否可以设置属性。
如果满足以下条件,则可以写入属性
- 该类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
- 该类具有与指定名称相同的成员变量(当
$checkVars
为 true 时); - 附加的行为具有给定名称的可写属性(当
$checkBehaviors
为 true 时)。
另请参阅 canGetProperty()。
public 布尔值 canSetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
属性名称 |
$checkVars | boolean |
是否将成员变量视为属性 |
$checkBehaviors | boolean |
是否将行为的属性视为此组件的属性 |
返回值 | boolean |
属性是否可写 |
---|
public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
::class
。
定义于: yii\base\BaseObject::className()
返回此类的完全限定名称。
public static 字符串 className ( ) | ||
返回值 | string |
此类的完全限定名称。 |
---|
public static function className()
{
return get_called_class();
}
protected yii\web\Cookie createCsrfCookie ( $token ) | ||
$token | string |
CSRF 令牌 |
返回值 | yii\web\Cookie |
生成的 Cookie |
---|
protected function createCsrfCookie($token)
{
$options = $this->csrfCookie;
return Yii::createObject(array_merge($options, [
'class' => 'yii\web\Cookie',
'name' => $this->csrfParam,
'value' => $token,
]));
}
public yii\base\Behavior|null detachBehavior ( $name ) | ||
$name | string |
行为的名称。 |
返回值 | yii\base\Behavior|null |
分离的行为。如果行为不存在,则为 Null。 |
---|
public function detachBehavior($name)
{
$this->ensureBehaviors();
if (isset($this->_behaviors[$name])) {
$behavior = $this->_behaviors[$name];
unset($this->_behaviors[$name]);
$behavior->detach();
return $behavior;
}
return null;
}
定义于: yii\base\Component::detachBehaviors()
从组件中分离所有行为。
public void detachBehaviors ( ) |
public function detachBehaviors()
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $name => $behavior) {
$this->detachBehavior($name);
}
}
定义于: yii\base\Component::ensureBehaviors()
确保在 behaviors() 中声明的行为已附加到此组件。
public void ensureBehaviors ( ) |
public function ensureBehaviors()
{
if ($this->_behaviors === null) {
$this->_behaviors = [];
foreach ($this->behaviors() as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
}
根据 $trustedHosts 过滤标头。
protected void filterHeaders ( yii\web\HeaderCollection $headerCollection ) | ||
$headerCollection | yii\web\HeaderCollection |
protected function filterHeaders(HeaderCollection $headerCollection)
{
$trustedHeaders = $this->getTrustedHeaders();
// remove all secure headers unless they are trusted
foreach ($this->secureHeaders as $secureHeader) {
if (!in_array($secureHeader, $trustedHeaders)) {
$headerCollection->remove($secureHeader);
}
}
}
生成用于执行 CSRF 验证的未掩码随机令牌。
protected 字符串 generateCsrfToken ( ) | ||
返回值 | string |
CSRF 验证的随机令牌。 |
---|
protected function generateCsrfToken()
{
$token = Yii::$app->getSecurity()->generateRandomString();
if ($this->enableCsrfCookie) {
$cookie = $this->createCsrfCookie($token);
Yii::$app->getResponse()->getCookies()->add($cookie);
} else {
Yii::$app->getSession()->set($this->csrfParam, $token);
}
return $token;
}
返回具有给定名称的 GET 参数。如果未指定名称,则返回所有 GET 参数的数组。
public 数组|混合 get ( $name = null, $defaultValue = null ) | ||
$name | string |
参数名称 |
$defaultValue | mixed |
如果参数不存在,则为默认参数值。 |
public function get($name = null, $defaultValue = null)
{
if ($name === null) {
return $this->getQueryParams();
}
return $this->getQueryParam($name, $defaultValue);
}
public 字符串 getAbsoluteUrl ( ) | ||
返回值 | string |
当前请求的绝对 URL。 |
---|
public function getAbsoluteUrl()
{
return $this->getHostInfo() . $this->getUrl();
}
返回最终用户可接受的内容类型。
这由 Accept
HTTP 头确定。例如,
$_SERVER['HTTP_ACCEPT'] = 'text/plain; q=0.5, application/json; version=1.0, application/xml; version=2.0;';
$types = $request->getAcceptableContentTypes();
print_r($types);
// displays:
// [
// 'application/json' => ['q' => 1, 'version' => '1.0'],
// 'application/xml' => ['q' => 1, 'version' => '2.0'],
// 'text/plain' => ['q' => 0.5],
// ]
public 数组 getAcceptableContentTypes ( ) | ||
返回值 | array |
按质量得分排序的内容类型。得分最高的类型将首先返回。数组键是内容类型,而数组值是相应的质量得分以及标头中给出的其他参数。 |
---|
public function getAcceptableContentTypes()
{
if ($this->_contentTypes === null) {
if ($this->headers->get('Accept') !== null) {
$this->_contentTypes = $this->parseAcceptHeader($this->headers->get('Accept'));
} else {
$this->_contentTypes = [];
}
}
return $this->_contentTypes;
}
返回最终用户可接受的语言。
这由 Accept-Language
HTTP 头确定。
public 数组 getAcceptableLanguages ( ) | ||
返回值 | array |
按偏好级别排序的语言。第一个元素表示最喜欢的语言。 |
---|
public function getAcceptableLanguages()
{
if ($this->_languages === null) {
if ($this->headers->has('Accept-Language')) {
$this->_languages = array_keys($this->parseAcceptHeader($this->headers->get('Accept-Language')));
} else {
$this->_languages = [];
}
}
return $this->_languages;
}
public 数组 getAuthCredentials ( ) | ||
返回值 | array |
包含两个元素
|
---|
public function getAuthCredentials()
{
$username = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null;
$password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : null;
if ($username !== null || $password !== null) {
return [$username, $password];
}
/**
* Apache with php-cgi does not pass HTTP Basic authentication to PHP by default.
* To make it work, add one of the following lines to to your .htaccess file:
*
* SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
* --OR--
* RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
*/
$auth_token = $this->getHeaders()->get('Authorization');
if ($auth_token !== null && strncasecmp($auth_token, 'basic', 5) === 0) {
$parts = array_map(function ($value) {
return strlen($value) === 0 ? null : $value;
}, explode(':', base64_decode(mb_substr($auth_token, 6)), 2));
if (count($parts) < 2) {
return [$parts[0], null];
}
return $parts;
}
return [null, null];
}
另请参阅 getAuthCredentials() 以一次获取用户名和密码。
public 字符串|null getAuthPassword ( ) | ||
返回值 | string|null |
通过 HTTP 认证发送的密码,如果未提供密码则为 |
---|
public function getAuthPassword()
{
return $this->getAuthCredentials()[1];
}
另请参阅 getAuthCredentials() 以一次获取用户名和密码。
public 字符串|null getAuthUser ( ) | ||
返回值 | string|null |
通过 HTTP 认证发送的用户名,如果未提供用户名则为 |
---|
public function getAuthUser()
{
return $this->getAuthCredentials()[0];
}
public 字符串 getBaseUrl ( ) | ||
返回值 | string |
应用程序的相对 URL |
---|
public function getBaseUrl()
{
if ($this->_baseUrl === null) {
$this->_baseUrl = rtrim(dirname($this->getScriptUrl()), '\\/');
}
return $this->_baseUrl;
}
定义于: yii\base\Component::getBehavior()
返回命名的行为对象。
public yii\base\Behavior|null getBehavior ( $name ) | ||
$name | string |
行为名称 |
返回值 | yii\base\Behavior|null |
行为对象,如果行为不存在则为 null |
---|
public function getBehavior($name)
{
$this->ensureBehaviors();
return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}
定义于: yii\base\Component::getBehaviors()
返回附加到此组件的所有行为。
public yii\base\Behavior[] getBehaviors ( ) | ||
返回值 | yii\base\Behavior[] |
附加到此组件的行为列表 |
---|
public function getBehaviors()
{
$this->ensureBehaviors();
return $this->_behaviors;
}
public 混合 getBodyParam ( $name, $defaultValue = null ) | ||
$name | string |
参数名称 |
$defaultValue | mixed |
如果参数不存在,则为默认参数值。 |
返回值 | mixed |
参数值 |
---|
public function getBodyParam($name, $defaultValue = null)
{
$params = $this->getBodyParams();
if (is_object($params)) {
// unable to use `ArrayHelper::getValue()` due to different dots in key logic and lack of exception handling
try {
return isset($params->{$name}) ? $params->{$name} : $defaultValue;
} catch (\Exception $e) {
return $defaultValue;
}
}
return isset($params[$name]) ? $params[$name] : $defaultValue;
}
返回请求正文中给出的请求参数。
请求参数是使用 $parsers 属性中配置的解析器确定的。如果当前 $contentType 未配置任何解析器,则它使用 PHP 函数 mb_parse_str()
来解析 请求体。
另请参阅
public 数组|对象 getBodyParams ( ) | ||
返回值 | array|object |
请求正文中给出的请求参数。 |
---|---|---|
抛出异常 | yii\base\InvalidConfigException |
如果注册的解析器未实现 yii\web\RequestParserInterface。 |
public function getBodyParams()
{
if ($this->_bodyParams === null) {
if (isset($_POST[$this->methodParam])) {
$this->_bodyParams = $_POST;
unset($this->_bodyParams[$this->methodParam]);
return $this->_bodyParams;
}
$rawContentType = $this->getContentType();
if (($pos = strpos((string)$rawContentType, ';')) !== false) {
// e.g. text/html; charset=UTF-8
$contentType = substr($rawContentType, 0, $pos);
} else {
$contentType = $rawContentType;
}
if (isset($this->parsers[$contentType])) {
$parser = Yii::createObject($this->parsers[$contentType]);
if (!($parser instanceof RequestParserInterface)) {
throw new InvalidConfigException("The '$contentType' request parser is invalid. It must implement the yii\\web\\RequestParserInterface.");
}
$this->_bodyParams = $parser->parse($this->getRawBody(), $rawContentType);
} elseif (isset($this->parsers['*'])) {
$parser = Yii::createObject($this->parsers['*']);
if (!($parser instanceof RequestParserInterface)) {
throw new InvalidConfigException('The fallback request parser is invalid. It must implement the yii\\web\\RequestParserInterface.');
}
$this->_bodyParams = $parser->parse($this->getRawBody(), $rawContentType);
} elseif ($this->getMethod() === 'POST') {
// PHP has already parsed the body so we have all params in $_POST
$this->_bodyParams = $_POST;
} else {
$this->_bodyParams = [];
mb_parse_str($this->getRawBody(), $this->_bodyParams);
}
}
return $this->_bodyParams;
}
返回请求内容类型 Content-Type 标头字段指示 getRawBody() 中包含的数据的 MIME 类型,或者在 HEAD 方法的情况下,如果请求为 GET,则会发送的媒体类型。
有关用户期望在响应中获得的 MIME 类型,请参阅 $acceptableContentTypes。
public 字符串 getContentType ( ) | ||
返回值 | string |
请求内容类型。如果此信息不可用,则返回空字符串。 |
---|
public function getContentType()
{
if (isset($_SERVER['CONTENT_TYPE'])) {
return $_SERVER['CONTENT_TYPE'];
}
//fix bug https://bugs.php.net/bug.php?id=66606
return $this->headers->get('Content-Type') ?: '';
}
返回 Cookie 集合。
通过返回的 Cookie 集合,您可以使用以下语法访问 Cookie
$cookie = $request->cookies['name']
if ($cookie !== null) {
$value = $cookie->value;
}
// alternatively
$value = $request->cookies->getValue('name');
public yii\web\CookieCollection getCookies ( ) | ||
返回值 | yii\web\CookieCollection |
Cookie 集合。 |
---|
public function getCookies()
{
if ($this->_cookies === null) {
$this->_cookies = new CookieCollection($this->loadCookies(), [
'readOnly' => true,
]);
}
return $this->_cookies;
}
返回用于执行 CSRF 验证的令牌。
此令牌以一种防止 BREACH 攻击 的方式生成。它可以通过 HTML 表单的隐藏字段或 HTTP 标头值传递,以支持 CSRF 验证。
public string getCsrfToken ( $regenerate = false ) | ||
$regenerate | boolean |
是否重新生成 CSRF 令牌。当此参数为 true 时,每次调用此方法都会生成一个新的 CSRF 令牌并将其持久化(在会话或 Cookie 中)。 |
返回值 | string |
用于执行 CSRF 验证的令牌。 |
---|
public function getCsrfToken($regenerate = false)
{
if ($this->_csrfToken === null || $regenerate) {
$token = $this->loadCsrfToken();
if ($regenerate || empty($token)) {
$token = $this->generateCsrfToken();
}
$this->_csrfToken = Yii::$app->security->maskToken($token);
}
return $this->_csrfToken;
}
public string|null getCsrfTokenFromHeader ( ) | ||
返回值 | string|null |
浏览器通过 CSRF_HEADER 发送的 CSRF 令牌。如果没有发送此类标头,则返回 Null。 |
---|
public function getCsrfTokenFromHeader()
{
return $this->headers->get(static::CSRF_HEADER);
}
获取 Etags。
public array getETags ( ) | ||
返回值 | array |
实体标签 |
---|
public function getETags()
{
if ($this->headers->has('If-None-Match')) {
return preg_split('/[\s,]+/', str_replace('-gzip', '', $this->headers->get('If-None-Match')), -1, PREG_SPLIT_NO_EMPTY);
}
return [];
}
返回标头集合。
标头集合包含传入的 HTTP 标头。
public yii\web\HeaderCollection getHeaders ( ) | ||
返回值 | yii\web\HeaderCollection |
标头集合 |
---|
public function getHeaders()
{
if ($this->_headers === null) {
$this->_headers = new HeaderCollection();
if (function_exists('getallheaders')) {
$headers = getallheaders();
foreach ($headers as $name => $value) {
$this->_headers->add($name, $value);
}
} elseif (function_exists('http_get_request_headers')) {
$headers = http_get_request_headers();
foreach ($headers as $name => $value) {
$this->_headers->add($name, $value);
}
} else {
// ['prefix' => length]
$headerPrefixes = ['HTTP_' => 5, 'REDIRECT_HTTP_' => 14];
foreach ($_SERVER as $name => $value) {
foreach ($headerPrefixes as $prefix => $length) {
if (strncmp($name, $prefix, $length) === 0) {
$name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, $length)))));
$this->_headers->add($name, $value);
continue 2;
}
}
}
}
$this->filterHeaders($this->_headers);
}
return $this->_headers;
}
返回当前请求 URL 的方案和主机部分。
返回的 URL 没有结尾斜杠。
默认情况下,此值基于用户请求信息。此方法将返回 $_SERVER['HTTP_HOST']
的值(如果可用),否则返回 $_SERVER['SERVER_NAME']
。您可能需要查看 PHP 文档 以获取有关这些变量的更多信息。
您可以通过设置 hostInfo 属性来显式指定它。
警告:根据服务器配置,此信息可能不可靠,并且 可能被发送 HTTP 请求的用户伪造。如果 Web 服务器配置为独立于
Host
标头的值提供相同的站点,则此值不可靠。在这种情况下,您应该修复您的 Web 服务器配置或通过设置 hostInfo 属性来显式设置值。如果您无法访问服务器配置,则可以在应用程序级别设置 yii\filters\HostControl 过滤器以防止此类攻击。
另请参阅 setHostInfo()。
public string|null getHostInfo ( ) | ||
返回值 | string|null |
请求 URL 的方案和主机名部分(如果需要,包括端口号)(例如: |
---|
public function getHostInfo()
{
if ($this->_hostInfo === null) {
$secure = $this->getIsSecureConnection();
$http = $secure ? 'https' : 'http';
if ($this->getSecureForwardedHeaderTrustedPart('host') !== null) {
$this->_hostInfo = $http . '://' . $this->getSecureForwardedHeaderTrustedPart('host');
} elseif ($this->headers->has('X-Forwarded-Host')) {
$this->_hostInfo = $http . '://' . trim(explode(',', $this->headers->get('X-Forwarded-Host'))[0]);
} elseif ($this->headers->has('X-Original-Host')) {
$this->_hostInfo = $http . '://' . trim(explode(',', $this->headers->get('X-Original-Host'))[0]);
} elseif ($this->headers->has('Host')) {
$this->_hostInfo = $http . '://' . $this->headers->get('Host');
} elseif (isset($_SERVER['SERVER_NAME'])) {
$this->_hostInfo = $http . '://' . $_SERVER['SERVER_NAME'];
$port = $secure ? $this->getSecurePort() : $this->getPort();
if (($port !== 80 && !$secure) || ($port !== 443 && $secure)) {
$this->_hostInfo .= ':' . $port;
}
}
}
return $this->_hostInfo;
}
返回当前请求 URL 的主机部分。
该值根据当前的 hostInfo 属性计算得出。
警告:此值的内容可能不可靠,具体取决于服务器配置。请参阅 getHostInfo() 以获取更多信息。
另请参阅 getHostInfo()。
public string|null getHostName ( ) | ||
返回值 | string|null |
请求 URL 的主机名部分(例如 |
---|
public function getHostName()
{
if ($this->_hostName === null) {
$this->_hostName = parse_url((string)$this->getHostInfo(), PHP_URL_HOST);
}
return $this->_hostName;
}
创建 yii\validators\IpValidator 的实例。
您可以覆盖此方法以调整验证器或实现不同的匹配策略。
protected yii\validators\IpValidator getIpValidator ( ) |
protected function getIpValidator()
{
return new IpValidator();
}
返回这是否为 AJAX (XMLHttpRequest) 请求。
请注意,在跨域请求的情况下,浏览器默认情况下不会设置 X-Requested-With 标头:https://stackoverflow.com/questions/8163703/cross-domain-ajax-doesnt-send-x-requested-with-header
如果您使用的是 fetch()
,请手动传递标头
fetch(url, {
method: 'GET',
headers: {'X-Requested-With': 'XMLHttpRequest'}
})
public boolean getIsAjax ( ) | ||
返回值 | boolean |
这是否是一个 AJAX(XMLHttpRequest)请求。 |
---|
public function getIsAjax()
{
return $this->headers->get('X-Requested-With') === 'XMLHttpRequest';
}
定义于: yii\base\Request::getIsConsoleRequest()
返回一个值,指示当前请求是否通过命令行发出。
public boolean getIsConsoleRequest ( ) | ||
返回值 | boolean |
指示当前请求是否通过控制台发出的值 |
---|
public function getIsConsoleRequest()
{
return $this->_isConsoleRequest !== null ? $this->_isConsoleRequest : PHP_SAPI === 'cli';
}
返回这是否为 DELETE 请求。
public boolean getIsDelete ( ) | ||
返回值 | boolean |
这是否是一个 DELETE 请求。 |
---|
public function getIsDelete()
{
return $this->getMethod() === 'DELETE';
}
返回这是否为 Adobe Flash 或 Flex 请求。
public boolean getIsFlash ( ) | ||
返回值 | boolean |
这是否是一个 Adobe Flash 或 Adobe Flex 请求。 |
---|
public function getIsFlash()
{
$userAgent = $this->headers->get('User-Agent', '');
return stripos($userAgent, 'Shockwave') !== false
|| stripos($userAgent, 'Flash') !== false;
}
返回这是否为 GET 请求。
public boolean getIsGet ( ) | ||
返回值 | boolean |
这是否是一个 GET 请求。 |
---|
public function getIsGet()
{
return $this->getMethod() === 'GET';
}
返回这是否为 HEAD 请求。
public boolean getIsHead ( ) | ||
返回值 | boolean |
这是否是一个 HEAD 请求。 |
---|
public function getIsHead()
{
return $this->getMethod() === 'HEAD';
}
返回这是否为 OPTIONS 请求。
public boolean getIsOptions ( ) | ||
返回值 | boolean |
这是否是一个 OPTIONS 请求。 |
---|
public function getIsOptions()
{
return $this->getMethod() === 'OPTIONS';
}
返回这是否为 PATCH 请求。
public boolean getIsPatch ( ) | ||
返回值 | boolean |
这是否是一个 PATCH 请求。 |
---|
public function getIsPatch()
{
return $this->getMethod() === 'PATCH';
}
返回这是否为 PJAX 请求。
public boolean getIsPjax ( ) | ||
返回值 | boolean |
是否为 PJAX 请求 |
---|
public function getIsPjax()
{
return $this->getIsAjax() && $this->headers->has('X-Pjax');
}
返回这是否为 POST 请求。
public boolean getIsPost ( ) | ||
返回值 | boolean |
这是否是一个 POST 请求。 |
---|
public function getIsPost()
{
return $this->getMethod() === 'POST';
}
返回这是否为 PUT 请求。
public boolean getIsPut ( ) | ||
返回值 | boolean |
这是否是一个 PUT 请求。 |
---|
public function getIsPut()
{
return $this->getMethod() === 'PUT';
}
返回请求是否通过安全通道 (https) 发送。
public boolean getIsSecureConnection ( ) | ||
返回值 | boolean |
如果请求是通过安全通道(https)发送的 |
---|
public function getIsSecureConnection()
{
if (isset($_SERVER['HTTPS']) && (strcasecmp($_SERVER['HTTPS'], 'on') === 0 || $_SERVER['HTTPS'] == 1)) {
return true;
}
if (($proto = $this->getSecureForwardedHeaderTrustedPart('proto')) !== null) {
return strcasecmp($proto, 'https') === 0;
}
foreach ($this->secureProtocolHeaders as $header => $values) {
if (($headerValue = $this->headers->get($header, null)) !== null) {
foreach ($values as $value) {
if (strcasecmp($headerValue, $value) === 0) {
return true;
}
}
}
}
return false;
}
返回当前请求的方法(例如 GET、POST、HEAD、PUT、PATCH、DELETE)。
public string getMethod ( ) | ||
返回值 | string |
请求方法,例如 GET、POST、HEAD、PUT、PATCH、DELETE。返回值将转换为大写。 |
---|
public function getMethod()
{
if (
isset($_POST[$this->methodParam])
// Never allow to downgrade request from WRITE methods (POST, PATCH, DELETE, etc)
// to read methods (GET, HEAD, OPTIONS) for security reasons.
&& !in_array(strtoupper($_POST[$this->methodParam]), ['GET', 'HEAD', 'OPTIONS'], true)
) {
return strtoupper($_POST[$this->methodParam]);
}
if ($this->headers->has('X-Http-Method-Override')) {
return strtoupper($this->headers->get('X-Http-Method-Override'));
}
if (isset($_SERVER['REQUEST_METHOD'])) {
return strtoupper($_SERVER['REQUEST_METHOD']);
}
return 'GET';
}
返回 CORS 请求的 URL 来源。
返回值取自浏览器发送的 Origin
header。
请注意,origin 请求头指示获取请求的来源。它不包含任何路径信息,只包含服务器名称。它与 CORS 请求以及 POST 请求一起发送。它类似于 referer 头,但与该头不同,它不会泄露整个路径。有关更多信息,请参阅 https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Origin。
另请参阅 getHeaders()。
public string|null getOrigin ( ) | ||
返回值 | string|null |
CORS 请求的 URL 来源,如果不可用则为 |
---|
public function getOrigin()
{
return $this->getHeaders()->get('origin');
}
返回当前请求 URL 的路径信息。
路径信息指的是入口脚本之后和问号(查询字符串)之前的部分。开头和结尾的斜杠都已删除。
public string getPathInfo ( ) | ||
返回值 | string |
请求 URL 中入口脚本之后和问号之前的部分。注意,返回的路径信息已进行 URL 解码。 |
---|---|---|
抛出异常 | yii\base\InvalidConfigException |
如果由于意外的服务器配置无法确定路径信息 |
public function getPathInfo()
{
if ($this->_pathInfo === null) {
$this->_pathInfo = $this->resolvePathInfo();
}
return $this->_pathInfo;
}
public integer getPort ( ) | ||
返回值 | integer |
非安全请求的端口号。 |
---|
public function getPort()
{
if ($this->_port === null) {
$serverPort = $this->getServerPort();
$this->_port = !$this->getIsSecureConnection() && $serverPort !== null ? $serverPort : 80;
}
return $this->_port;
}
返回此应用程序应使用的用户首选语言。
语言解析基于用户首选语言和应用程序支持的语言。该方法将尝试找到最佳匹配。
public string getPreferredLanguage ( array $languages = [] ) | ||
$languages | array |
应用程序支持的语言列表。如果为空,则在不进行进一步处理的情况下返回当前应用程序语言。 |
返回值 | string |
应用程序应使用的语言。 |
---|
public function getPreferredLanguage(array $languages = [])
{
if (empty($languages)) {
return Yii::$app->language;
}
foreach ($this->getAcceptableLanguages() as $acceptableLanguage) {
$acceptableLanguage = str_replace('_', '-', strtolower($acceptableLanguage));
foreach ($languages as $language) {
$normalizedLanguage = str_replace('_', '-', strtolower($language));
if (
$normalizedLanguage === $acceptableLanguage // en-us==en-us
|| strpos($acceptableLanguage, $normalizedLanguage . '-') === 0 // en==en-us
|| strpos($normalizedLanguage, $acceptableLanguage . '-') === 0 // en-us==en
) {
return $language;
}
}
}
return reset($languages);
}
public mixed getQueryParam ( $name, $defaultValue = null ) | ||
$name | string |
GET 参数名称。 |
$defaultValue | mixed |
如果 GET 参数不存在,则为默认参数值。 |
返回值 | mixed |
GET 参数值 |
---|
public function getQueryParam($name, $defaultValue = null)
{
$params = $this->getQueryParams();
return isset($params[$name]) ? $params[$name] : $defaultValue;
}
public array getQueryParams ( ) | ||
返回值 | array |
请求 GET 参数值。 |
---|
public function getQueryParams()
{
if ($this->_queryParams === null) {
return $_GET;
}
return $this->_queryParams;
}
返回请求 URL 中问号后面的部分。
public string getQueryString ( ) | ||
返回值 | string |
请求 URL 中问号之后的部分 |
---|
public function getQueryString()
{
return isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
}
返回原始 HTTP 请求正文。
public string getRawBody ( ) | ||
返回值 | string |
请求体 |
---|
public function getRawBody()
{
if ($this->_rawBody === null) {
$this->_rawBody = file_get_contents('php://input');
}
return $this->_rawBody;
}
返回 URL 来源。
public string|null getReferrer ( ) | ||
返回值 | string|null |
URL 来源,如果不可用则为 null |
---|
public function getReferrer()
{
return $this->headers->get('Referer');
}
public string|null getRemoteHost ( ) | ||
返回值 | string|null |
远程主机名,如果不可用则为 |
---|
public function getRemoteHost()
{
return isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : null;
}
返回此连接另一端的 IP 地址。
这始终是下一跳,任何标头都会被忽略。
public string|null getRemoteIP ( ) | ||
返回值 | string|null |
远程 IP 地址,如果不可用则为 |
---|
public function getRemoteIP()
{
return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
}
返回入口脚本文件路径。
默认实现将简单地返回 $_SERVER['SCRIPT_FILENAME']
。
public string getScriptFile ( ) | ||
返回值 | string |
入口脚本文件路径 |
---|---|---|
抛出异常 | yii\base\InvalidConfigException |
public function getScriptFile()
{
if (isset($this->_scriptFile)) {
return $this->_scriptFile;
}
if (isset($_SERVER['SCRIPT_FILENAME'])) {
return $_SERVER['SCRIPT_FILENAME'];
}
throw new InvalidConfigException('Unable to determine the entry script file path.');
}
返回入口脚本的相对 URL。
此方法的实现参考了 Zend Framework 中的 Zend_Controller_Request_Http。
public string getScriptUrl ( ) | ||
返回值 | string |
入口脚本的相对 URL。 |
---|---|---|
抛出异常 | yii\base\InvalidConfigException |
如果无法确定入口脚本 URL |
public function getScriptUrl()
{
if ($this->_scriptUrl === null) {
$scriptFile = $this->getScriptFile();
$scriptName = basename($scriptFile);
if (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $scriptName) {
$this->_scriptUrl = $_SERVER['SCRIPT_NAME'];
} elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $scriptName) {
$this->_scriptUrl = $_SERVER['PHP_SELF'];
} elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $scriptName) {
$this->_scriptUrl = $_SERVER['ORIG_SCRIPT_NAME'];
} elseif (isset($_SERVER['PHP_SELF']) && ($pos = strpos($_SERVER['PHP_SELF'], '/' . $scriptName)) !== false) {
$this->_scriptUrl = substr($_SERVER['SCRIPT_NAME'], 0, $pos) . '/' . $scriptName;
} elseif (!empty($_SERVER['DOCUMENT_ROOT']) && strpos($scriptFile, $_SERVER['DOCUMENT_ROOT']) === 0) {
$this->_scriptUrl = str_replace([$_SERVER['DOCUMENT_ROOT'], '\\'], ['', '/'], $scriptFile);
} else {
throw new InvalidConfigException('Unable to determine the entry script URL.');
}
}
return $this->_scriptUrl;
}
返回解码的转发标头
protected array getSecureForwardedHeaderParts ( ) |
protected function getSecureForwardedHeaderParts()
{
if ($this->_secureForwardedHeaderParts !== null) {
return $this->_secureForwardedHeaderParts;
}
if (count(preg_grep('/^forwarded$/i', $this->secureHeaders)) === 0) {
return $this->_secureForwardedHeaderParts = [];
}
/*
* First header is always correct, because proxy CAN add headers
* after last one is found.
* Keep in mind that it is NOT enforced, therefore we cannot be
* sure, that this is really a first one.
*
* FPM keeps last header sent which is a bug. You need to merge
* headers together on your web server before letting FPM handle it
* @see https://bugs.php.net/bug.php?id=78844
*/
$forwarded = $this->headers->get('Forwarded', '');
if ($forwarded === '') {
return $this->_secureForwardedHeaderParts = [];
}
preg_match_all('/(?:[^",]++|"[^"]++")+/', $forwarded, $forwardedElements);
foreach ($forwardedElements[0] as $forwardedPairs) {
preg_match_all('/(?P<key>\w+)\s*=\s*(?:(?P<value>[^",;]*[^",;\s])|"(?P<value2>[^"]+)")/', $forwardedPairs, $matches, PREG_SET_ORDER);
$this->_secureForwardedHeaderParts[] = array_reduce($matches, function ($carry, $item) {
$value = $item['value'];
if (isset($item['value2']) && $item['value2'] !== '') {
$value = $item['value2'];
}
$carry[strtolower($item['key'])] = $value;
return $carry;
}, []);
}
return $this->_secureForwardedHeaderParts;
}
获取令牌的第一个 Forwarded
标头值
protected string|null getSecureForwardedHeaderTrustedPart ( $token ) | ||
$token | string |
标头令牌 |
protected function getSecureForwardedHeaderTrustedPart($token)
{
$token = strtolower($token);
if ($parts = $this->getSecureForwardedHeaderTrustedParts()) {
$lastElement = array_pop($parts);
if ($lastElement && isset($lastElement[$token])) {
return $lastElement[$token];
}
}
return null;
}
仅获取受信任的 Forwarded
标头部分
protected array getSecureForwardedHeaderTrustedParts ( ) |
protected function getSecureForwardedHeaderTrustedParts()
{
if ($this->_secureForwardedHeaderTrustedParts !== null) {
return $this->_secureForwardedHeaderTrustedParts;
}
$validator = $this->getIpValidator();
$trustedHosts = [];
foreach ($this->trustedHosts as $trustedCidr => $trustedCidrOrHeaders) {
if (!is_array($trustedCidrOrHeaders)) {
$trustedCidr = $trustedCidrOrHeaders;
}
$trustedHosts[] = $trustedCidr;
}
$validator->setRanges($trustedHosts);
$this->_secureForwardedHeaderTrustedParts = array_filter(
$this->getSecureForwardedHeaderParts(),
function ($headerPart) use ($validator) {
return isset($headerPart['for']) ? !$validator->validate($headerPart['for']) : true;
}
);
return $this->_secureForwardedHeaderTrustedParts;
}
public integer getSecurePort ( ) | ||
返回值 | integer |
安全请求的端口号。 |
---|
public function getSecurePort()
{
if ($this->_securePort === null) {
$serverPort = $this->getServerPort();
$this->_securePort = $this->getIsSecureConnection() && $serverPort !== null ? $serverPort : 443;
}
return $this->_securePort;
}
返回服务器名称。
public string|null getServerName ( ) | ||
返回值 | string|null |
服务器名称,如果不可用则为 null |
---|
public function getServerName()
{
return isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : null;
}
返回服务器端口号。如果通过转发标头(例如“X-Forwarded-Port”)指定了端口,并且远程主机是“受信任的主机”,则将使用该端口(请参阅 $portHeaders),否则将返回默认服务器端口。
另请参阅 $portHeaders。
public integer|null getServerPort ( ) | ||
返回值 | integer|null |
服务器端口号,如果不可用则为 null |
---|
public function getServerPort()
{
foreach ($this->portHeaders as $portHeader) {
if ($this->headers->has($portHeader)) {
$port = $this->headers->get($portHeader);
if ($port !== null) {
return $port;
}
}
}
return isset($_SERVER['SERVER_PORT']) ? (int) $_SERVER['SERVER_PORT'] : null;
}
根据 $trustedHosts 获取受信任的标头。
protected array getTrustedHeaders ( ) |
protected function getTrustedHeaders()
{
// do not trust any of the [[secureHeaders]] by default
$trustedHeaders = [];
// check if the client is a trusted host
if (!empty($this->trustedHosts)) {
$validator = $this->getIpValidator();
$ip = $this->getRemoteIP();
foreach ($this->trustedHosts as $cidr => $headers) {
if (!is_array($headers)) {
$cidr = $headers;
$headers = $this->secureHeaders;
}
$validator->setRanges($cidr);
if ($validator->validate($ip)) {
$trustedHeaders = $headers;
break;
}
}
}
return $trustedHeaders;
}
返回当前请求的相对 URL。
这指的是 URL 中 $hostInfo 部分之后的部分。它包含 $queryString 部分(如果有)。
public string getUrl ( ) | ||
返回值 | string |
当前请求的相对 URL。请注意,返回的 URI 可能会根据客户端进行 URL 编码。 |
---|---|---|
抛出异常 | yii\base\InvalidConfigException |
如果由于服务器配置异常而无法确定 URL |
public function getUrl()
{
if ($this->_url === null) {
$this->_url = $this->resolveRequestUri();
}
return $this->_url;
}
返回用户代理。
public string|null getUserAgent ( ) | ||
返回值 | string|null |
用户代理,如果不可用则为 null |
---|
public function getUserAgent()
{
return $this->headers->get('User-Agent');
}
返回用户主机名称。
HOST 使用标头和/或 $_SERVER
变量确定。
public string|null getUserHost ( ) | ||
返回值 | string|null |
用户主机名,如果不可用则为 null |
---|
public function getUserHost()
{
$userIp = $this->getUserIpFromIpHeaders();
if ($userIp === null) {
return $this->getRemoteHost();
}
return gethostbyaddr($userIp);
}
返回用户 IP 地址。
IP 使用标头和/或 $_SERVER
变量确定。
public string|null getUserIP ( ) | ||
返回值 | string|null |
用户 IP 地址,如果不可用则为 null |
---|
public function getUserIP()
{
if ($this->_ip === null) {
$this->_ip = $this->getUserIpFromIpHeaders();
if ($this->_ip === null) {
$this->_ip = $this->getRemoteIP();
}
}
return $this->_ip;
}
protected string|null getUserIpFromIpHeader ( $ips ) | ||
$ips | string |
逗号分隔的 IP 列表 |
返回值 | string|null |
IP 作为字符串。如果无法从标头确定 IP,则返回 Null。 |
---|
protected function getUserIpFromIpHeader($ips)
{
$ips = trim($ips);
if ($ips === '') {
return null;
}
$ips = preg_split('/\s*,\s*/', $ips, -1, PREG_SPLIT_NO_EMPTY);
krsort($ips);
$validator = $this->getIpValidator();
$resultIp = null;
foreach ($ips as $ip) {
$validator->setRanges('any');
if (!$validator->validate($ip) /* checking IP format */) {
break;
}
$resultIp = $ip;
$isTrusted = false;
foreach ($this->trustedHosts as $trustedCidr => $trustedCidrOrHeaders) {
if (!is_array($trustedCidrOrHeaders)) {
$trustedCidr = $trustedCidrOrHeaders;
}
$validator->setRanges($trustedCidr);
if ($validator->validate($ip) /* checking trusted range */) {
$isTrusted = true;
break;
}
}
if (!$isTrusted) {
break;
}
}
return $resultIp;
}
从 $ipHeaders 返回用户 IP 地址。
另请参阅 $ipHeaders。
受保护 字符串|空 getUserIpFromIpHeaders ( ) | ||
返回值 | string|null |
用户 IP 地址,如果不可用则为 null |
---|
protected function getUserIpFromIpHeaders()
{
$ip = $this->getSecureForwardedHeaderTrustedPart('for');
if (
$ip !== null && preg_match(
'/^\[?(?P<ip>(?:(?:(?:[0-9a-f]{1,4}:){1,6}(?:[0-9a-f]{1,4})?(?:(?::[0-9a-f]{1,4}){1,6}))|(?:\d{1,3}\.){3}\d{1,3}))\]?(?::(?P<port>\d+))?$/',
$ip,
$matches
)
) {
$ip = $this->getUserIpFromIpHeader($matches['ip']);
if ($ip !== null) {
return $ip;
}
}
foreach ($this->ipHeaders as $ipHeader) {
if ($this->headers->has($ipHeader)) {
$ip = $this->getUserIpFromIpHeader($this->headers->get($ipHeader));
if ($ip !== null) {
return $ip;
}
}
}
return null;
}
定义于: yii\base\Component::hasEventHandlers()
返回一个值,指示是否有任何处理程序附加到命名的事件。
公共 布尔值 hasEventHandlers ( $name ) | ||
$name | string |
事件名称 |
返回值 | boolean |
是否存在任何附加到事件的处理程序。 |
---|
public function hasEventHandlers($name)
{
$this->ensureBehaviors();
if (!empty($this->_events[$name])) {
return true;
}
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
return true;
}
}
return Event::hasHandlers($this, $name);
}
定义于: yii\base\Component::hasMethod()
返回一个值,指示是否定义了方法。
如果定义了方法
- 该类具有指定名称的方法
- 附加的行为具有给定名称的方法(当
$checkBehaviors
为 true 时)。
公共 布尔值 hasMethod ( $name, $checkBehaviors = true ) | ||
$name | string |
属性名称 |
$checkBehaviors | boolean |
是否将行为的方法视为此组件的方法 |
返回值 | boolean |
该方法是否已定义 |
---|
public function hasMethod($name, $checkBehaviors = true)
{
if (method_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->hasMethod($name)) {
return true;
}
}
}
return false;
}
定义于: yii\base\Component::hasProperty()
返回一个值,指示是否为此组件定义了属性。
如果定义了属性
- 该类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
- 该类具有与指定名称相同的成员变量(当
$checkVars
为 true 时); - 附加的行为具有给定名称的属性(当
$checkBehaviors
为 true 时)。
另请参阅
公共 布尔值 hasProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
属性名称 |
$checkVars | boolean |
是否将成员变量视为属性 |
$checkBehaviors | boolean |
是否将行为的属性视为此组件的属性 |
返回值 | boolean |
属性是否已定义 |
---|
public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}
公共 void init ( ) |
public function init()
{
}
将 $_COOKIE
转换为 yii\web\Cookie 数组。
受保护 数组 loadCookies ( ) | ||
返回值 | array |
从请求中获取的 Cookie |
---|---|---|
抛出异常 | yii\base\InvalidConfigException |
如果 $cookieValidationKey 未设置且 $enableCookieValidation 为 true |
protected function loadCookies()
{
$cookies = [];
if ($this->enableCookieValidation) {
if ($this->cookieValidationKey == '') {
throw new InvalidConfigException(get_class($this) . '::cookieValidationKey must be configured with a secret key.');
}
foreach ($_COOKIE as $name => $value) {
if (!is_string($value)) {
continue;
}
$data = Yii::$app->getSecurity()->validateData($value, $this->cookieValidationKey);
if ($data === false) {
continue;
}
if (defined('PHP_VERSION_ID') && PHP_VERSION_ID >= 70000) {
$data = @unserialize($data, ['allowed_classes' => false]);
} else {
$data = @unserialize($data);
}
if (is_array($data) && isset($data[0], $data[1]) && $data[0] === $name) {
$cookies[$name] = Yii::createObject([
'class' => 'yii\web\Cookie',
'name' => $name,
'value' => $data[1],
'expire' => null,
]);
}
}
} else {
foreach ($_COOKIE as $name => $value) {
$cookies[$name] = Yii::createObject([
'class' => 'yii\web\Cookie',
'name' => $name,
'value' => $value,
'expire' => null,
]);
}
}
return $cookies;
}
从 Cookie 或会话中加载 CSRF 令牌。
受保护 字符串|空 loadCsrfToken ( ) | ||
返回值 | string|null |
从 Cookie 或会话中加载的 CSRF 令牌。如果 Cookie 或会话中没有 CSRF 令牌,则返回 Null。 |
---|
protected function loadCsrfToken()
{
if ($this->enableCsrfCookie) {
return $this->getCookies()->getValue($this->csrfParam);
}
return Yii::$app->getSession()->get($this->csrfParam);
}
定义于: yii\base\Component::off()
从此组件中分离现有的事件处理程序。
此方法与 on() 相反。
注意:如果为事件名称传递通配符模式,则只会删除使用此通配符注册的处理程序,而使用与此通配符匹配的普通名称注册的处理程序将保留。
另请参阅 on()。
公共 布尔值 off ( $name, $handler = null ) | ||
$name | string |
事件名称 |
$handler | 可调用|空 |
要删除的事件处理程序。如果为 null,则将删除附加到命名事件的所有处理程序。 |
返回值 | boolean |
如果找到并分离了一个处理程序 |
---|
public function off($name, $handler = null)
{
$this->ensureBehaviors();
if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
return false;
}
if ($handler === null) {
unset($this->_events[$name], $this->_eventWildcards[$name]);
return true;
}
$removed = false;
// plain event names
if (isset($this->_events[$name])) {
foreach ($this->_events[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_events[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_events[$name] = array_values($this->_events[$name]);
return true;
}
}
// wildcard event names
if (isset($this->_eventWildcards[$name])) {
foreach ($this->_eventWildcards[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_eventWildcards[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
// remove empty wildcards to save future redundant regex checks:
if (empty($this->_eventWildcards[$name])) {
unset($this->_eventWildcards[$name]);
}
}
}
return $removed;
}
将事件处理程序附加到事件。
事件处理程序必须是有效的 PHP 回调。以下是一些示例
function ($event) { ... } // anonymous function
[$object, 'handleClick'] // $object->handleClick()
['Page', 'handleClick'] // Page::handleClick()
'handleClick' // global function handleClick()
事件处理程序必须使用以下签名定义,
function ($event)
其中 $event
是一个 yii\base\Event 对象,其中包含与事件关联的参数。
从 2.0.14 开始,您可以将事件名称指定为通配符模式
$component->on('event.group.*', function ($event) {
Yii::trace($event->name . ' is triggered.');
});
另请参阅 off()。
公共 void on ( $name, $handler, $data = null, $append = true ) | ||
$name | string |
事件名称 |
$handler | 可调用 |
事件处理程序 |
$data | mixed |
触发事件时传递给事件处理程序的数据。调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。 |
$append | boolean |
是否将新的事件处理程序追加到现有处理程序列表的末尾。如果为 false,则新的处理程序将插入到现有处理程序列表的开头。 |
public function on($name, $handler, $data = null, $append = true)
{
$this->ensureBehaviors();
if (strpos($name, '*') !== false) {
if ($append || empty($this->_eventWildcards[$name])) {
$this->_eventWildcards[$name][] = [$handler, $data];
} else {
array_unshift($this->_eventWildcards[$name], [$handler, $data]);
}
return;
}
if ($append || empty($this->_events[$name])) {
$this->_events[$name][] = [$handler, $data];
} else {
array_unshift($this->_events[$name], [$handler, $data]);
}
}
解析给定的 Accept
(或 Accept-Language
)标头。
此方法将返回可接受的值及其质量分数以及给定 Accept
标头中指定的相应参数。返回值的数组键是可接受的值,而数组值包含相应的质量分数和参数。将首先返回质量分数最高的可接受值。例如,
$header = 'text/plain; q=0.5, application/json; version=1.0, application/xml; version=2.0;';
$accepts = $request->parseAcceptHeader($header);
print_r($accepts);
// displays:
// [
// 'application/json' => ['q' => 1, 'version' => '1.0'],
// 'application/xml' => ['q' => 1, 'version' => '2.0'],
// 'text/plain' => ['q' => 0.5],
// ]
公共 数组 parseAcceptHeader ( $header ) | ||
$header | string |
要解析的标头 |
返回值 | array |
按质量分数排序的可接受值。将首先返回分数最高的值。 |
---|
public function parseAcceptHeader($header)
{
$accepts = [];
foreach (explode(',', $header) as $i => $part) {
$params = preg_split('/\s*;\s*/', trim($part), -1, PREG_SPLIT_NO_EMPTY);
if (empty($params)) {
continue;
}
$values = [
'q' => [$i, array_shift($params), 1],
];
foreach ($params as $param) {
if (strpos($param, '=') !== false) {
list($key, $value) = explode('=', $param, 2);
if ($key === 'q') {
$values['q'][2] = (float) $value;
} else {
$values[$key] = $value;
}
} else {
$values[] = $param;
}
}
$accepts[] = $values;
}
usort($accepts, function ($a, $b) {
$a = $a['q']; // index, name, q
$b = $b['q'];
if ($a[2] > $b[2]) {
return -1;
}
if ($a[2] < $b[2]) {
return 1;
}
if ($a[1] === $b[1]) {
return $a[0] > $b[0] ? 1 : -1;
}
if ($a[1] === '*/*') {
return 1;
}
if ($b[1] === '*/*') {
return -1;
}
$wa = $a[1][strlen($a[1]) - 1] === '*';
$wb = $b[1][strlen($b[1]) - 1] === '*';
if ($wa xor $wb) {
return $wa ? 1 : -1;
}
return $a[0] > $b[0] ? 1 : -1;
});
$result = [];
foreach ($accepts as $accept) {
$name = $accept['q'][1];
$accept['q'] = $accept['q'][2];
$result[$name] = $accept;
}
return $result;
}
返回具有给定名称的 POST 参数。如果未指定名称,则返回所有 POST 参数的数组。
公共 数组|混合 post ( $name = null, $defaultValue = null ) | ||
$name | string |
参数名称 |
$defaultValue | mixed |
如果参数不存在,则为默认参数值。 |
public function post($name = null, $defaultValue = null)
{
if ($name === null) {
return $this->getBodyParams();
}
return $this->getBodyParam($name, $defaultValue);
}
将当前请求解析为路由和关联的参数。
公共 数组 resolve ( ) | ||
返回值 | array |
第一个元素是路由,第二个是关联的参数。 |
---|---|---|
抛出异常 | yii\web\NotFoundHttpException |
如果无法解析请求。 |
public function resolve()
{
$result = Yii::$app->getUrlManager()->parseRequest($this);
if ($result !== false) {
list($route, $params) = $result;
if ($this->_queryParams === null) {
$_GET = $params + $_GET; // preserve numeric keys
} else {
$this->_queryParams = $params + $this->_queryParams;
}
return [$route, $this->getQueryParams()];
}
throw new NotFoundHttpException(Yii::t('yii', 'Page not found.'));
}
解析当前请求 URL 的路径信息部分。
路径信息指的是入口脚本之后、问号(查询字符串)之前的部分。起始斜杠都会被移除(结尾斜杠将会保留)。
受保护的 字符串 resolvePathInfo ( ) | ||
返回值 | string |
请求 URL 中入口脚本之后、问号之前的部分。注意,返回的路径信息是解码后的。 |
---|---|---|
抛出异常 | yii\base\InvalidConfigException |
如果由于意外的服务器配置无法确定路径信息 |
protected function resolvePathInfo()
{
$pathInfo = $this->getUrl();
if (($pos = strpos($pathInfo, '?')) !== false) {
$pathInfo = substr($pathInfo, 0, $pos);
}
$pathInfo = urldecode($pathInfo);
// try to encode in UTF8 if not so
// https://www.w3.org/International/questions/qa-forms-utf-8.en.html
if (
!preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $pathInfo)
) {
$pathInfo = $this->utf8Encode($pathInfo);
}
$scriptUrl = $this->getScriptUrl();
$baseUrl = $this->getBaseUrl();
if (strpos($pathInfo, $scriptUrl) === 0) {
$pathInfo = substr($pathInfo, strlen($scriptUrl));
} elseif ($baseUrl === '' || strpos($pathInfo, $baseUrl) === 0) {
$pathInfo = substr($pathInfo, strlen($baseUrl));
} elseif (isset($_SERVER['PHP_SELF']) && strpos($_SERVER['PHP_SELF'], $scriptUrl) === 0) {
$pathInfo = substr($_SERVER['PHP_SELF'], strlen($scriptUrl));
} else {
throw new InvalidConfigException('Unable to determine the path info of the current request.');
}
if (strncmp($pathInfo, '/', 1) === 0) {
$pathInfo = substr($pathInfo, 1);
}
return (string) $pathInfo;
}
解析当前请求 URL 的请求 URI 部分。
这指的是 $hostInfo 部分之后的部分。它包含 $queryString 部分(如果有)。此方法的实现参考了 Zend Framework 中的 Zend_Controller_Request_Http。
受保护的 字符串|布尔值 resolveRequestUri ( ) | ||
返回值 | 字符串|布尔值 |
当前请求 URL 的请求 URI 部分。请注意,根据客户端的不同,返回的 URI 可能是 URL 编码的。 |
---|---|---|
抛出异常 | yii\base\InvalidConfigException |
如果由于服务器配置异常而无法确定请求 URI |
protected function resolveRequestUri()
{
if ($this->headers->has('X-Rewrite-Url')) { // IIS
$requestUri = $this->headers->get('X-Rewrite-Url');
} elseif (isset($_SERVER['REQUEST_URI'])) {
$requestUri = $_SERVER['REQUEST_URI'];
if ($requestUri !== '' && $requestUri[0] !== '/') {
$requestUri = preg_replace('/^(http|https):\/\/[^\/]+/i', '', $requestUri);
}
} elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0 CGI
$requestUri = $_SERVER['ORIG_PATH_INFO'];
if (!empty($_SERVER['QUERY_STRING'])) {
$requestUri .= '?' . $_SERVER['QUERY_STRING'];
}
} else {
throw new InvalidConfigException('Unable to determine the request URI.');
}
return $requestUri;
}
公共的 空 setAcceptableContentTypes ( $value ) | ||
$value | array |
最终用户可接受的内容类型。它们应按优先级排序。 |
public function setAcceptableContentTypes($value)
{
$this->_contentTypes = $value;
}
公共的 空 setAcceptableLanguages ( $value ) | ||
$value | array |
最终用户可接受的语言。它们应按优先级排序。 |
public function setAcceptableLanguages($value)
{
$this->_languages = $value;
}
设置应用程序的相对 URL。
默认情况下,URL 是根据入口脚本 URL 确定的。如果您想更改此行为,可以提供此设置器。
公共的 空 setBaseUrl ( $value ) | ||
$value | string |
应用程序的相对 URL |
public function setBaseUrl($value)
{
$this->_baseUrl = $value;
}
设置请求正文参数。
另请参阅 getBodyParams()。
公共的 空 setBodyParams ( $values ) | ||
$values | array|object |
请求正文参数(名称-值对) |
public function setBodyParams($values)
{
$this->_bodyParams = $values;
}
公共的 空 setHostInfo ( $value ) | ||
$value | string|null |
应用程序 URL 的模式和主机部分。尾随斜杠将被移除。 |
public function setHostInfo($value)
{
$this->_hostName = null;
$this->_hostInfo = $value === null ? null : rtrim($value, '/');
}
定义于: yii\base\Request::setIsConsoleRequest()
设置一个值,指示当前请求是否通过命令行发出。
公共的 空 setIsConsoleRequest ( $value ) | ||
$value | boolean |
指示当前请求是否通过命令行发出的值。 |
public function setIsConsoleRequest($value)
{
$this->_isConsoleRequest = $value;
}
设置当前请求的路径信息。
此方法主要用于测试目的。
公共的 空 setPathInfo ( $value ) | ||
$value | string |
当前请求的路径信息。 |
public function setPathInfo($value)
{
$this->_pathInfo = $value === null ? null : ltrim($value, '/');
}
设置用于不安全请求的端口。
此设置器是在某些服务器配置需要自定义端口时提供的。
公共的 空 setPort ( $value ) | ||
$value | integer |
端口号。 |
public function setPort($value)
{
if ($value != $this->_port) {
$this->_port = (int) $value;
$this->_hostInfo = null;
}
}
公共的 空 setQueryParams ( $values ) | ||
$values | array |
请求查询参数(名称-值对) |
public function setQueryParams($values)
{
$this->_queryParams = $values;
}
设置原始 HTTP 请求正文,此方法主要由测试脚本用于模拟原始 HTTP 请求。
公共的 空 setRawBody ( $rawBody ) | ||
$rawBody | string |
请求体 |
public function setRawBody($rawBody)
{
$this->_rawBody = $rawBody;
}
设置入口脚本文件路径。
入口脚本文件路径通常可以从 $_SERVER['SCRIPT_FILENAME']
获取。如果您的服务器配置没有返回正确的值,您可以配置此属性使其正确。
公共的 空 setScriptFile ( $value ) | ||
$value | string |
入口脚本文件路径。 |
public function setScriptFile($value)
{
$this->_scriptFile = $value;
}
设置应用程序入口脚本的相对 URL。
此设置器是在某些 Web 服务器上无法确定入口脚本 URL 时提供的。
公共的 空 setScriptUrl ( $value ) | ||
$value | string |
应用程序入口脚本的相对 URL。 |
public function setScriptUrl($value)
{
$this->_scriptUrl = $value === null ? null : '/' . trim($value, '/');
}
设置用于安全请求的端口。
此设置器是在某些服务器配置需要自定义端口时提供的。
public void setSecurePort ( $value ) | ||
$value | integer |
端口号。 |
public function setSecurePort($value)
{
if ($value != $this->_securePort) {
$this->_securePort = (int) $value;
$this->_hostInfo = null;
}
}
设置当前请求的相对 URL。
URI 必须引用 $hostInfo 之后的部分。请注意,URI 应该进行 URL 编码。
public void setUrl ( $value ) | ||
$value | string |
要设置的请求 URI |
public function setUrl($value)
{
$this->_url = $value;
}
public void trigger ( $name, yii\base\Event $event = null ) | ||
$name | string |
事件名称 |
$event | yii\base\Event|null |
事件实例。如果未设置,将创建一个默认的 yii\base\Event 对象。 |
public function trigger($name, Event $event = null)
{
$this->ensureBehaviors();
$eventHandlers = [];
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (StringHelper::matchWildcard($wildcard, $name)) {
$eventHandlers[] = $handlers;
}
}
if (!empty($this->_events[$name])) {
$eventHandlers[] = $this->_events[$name];
}
if (!empty($eventHandlers)) {
$eventHandlers = call_user_func_array('array_merge', $eventHandlers);
if ($event === null) {
$event = new Event();
}
if ($event->sender === null) {
$event->sender = $this;
}
$event->handled = false;
$event->name = $name;
foreach ($eventHandlers as $handler) {
$event->data = $handler[1];
call_user_func($handler[0], $event);
// stop further handling if the event is handled
if ($event->handled) {
return;
}
}
}
// invoke class-level attached handlers
Event::trigger($this, $name, $event);
}
执行 CSRF 验证。
此方法将通过将其与存储在 cookie 或会话中的令牌进行比较来验证用户提供的 CSRF 令牌。此方法主要在 yii\web\Controller::beforeAction() 中调用。
请注意,如果 $enableCsrfValidation 为 false 或 HTTP 方法属于 GET、HEAD 或 OPTIONS,则此方法将**不**执行 CSRF 验证。
public boolean validateCsrfToken ( $clientSuppliedToken = null ) | ||
$clientSuppliedToken | string|null |
要验证的用户提供的 CSRF 令牌。如果为 null,则将从 $csrfParam POST 字段或 HTTP 标头中检索令牌。此参数自版本 2.0.4 起可用。 |
返回值 | boolean |
CSRF 令牌是否有效。如果 $enableCsrfValidation 为 false,则此方法将返回 true。 |
---|
public function validateCsrfToken($clientSuppliedToken = null)
{
$method = $this->getMethod();
// only validate CSRF token on non-"safe" methods https://tools.ietf.org/html/rfc2616#section-9.1.1
if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {
return true;
}
$trueToken = $this->getCsrfToken();
if ($clientSuppliedToken !== null) {
return $this->validateCsrfTokenInternal($clientSuppliedToken, $trueToken);
}
return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)
|| $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);
}
注册 或 登录 以发表评论。