Class yii\filters\RateLimiter

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

RateLimiter 基于 leaky bucket algorithm 实现了一种速率限制算法.

你可以通过将 RateLimiter 作为行为附加到控制器或模块来使用它, 如下所示:

public function behaviors()
{
    return [
        'rateLimiter' => [
            'class' => \yii\filters\RateLimiter::className(),
        ],
    ];
}

当用户超出其速率限制时, RateLimiter 将抛出 yii\web\TooManyRequestsHttpException 异常.

Note: RateLimiter 需要 用户 来实现 yii\filters\RateLimitInterface. 如果 用户 未设置或未实现 yii\filters\RateLimitInterface, RateLimiter 将不执行任何操作.

公共属性

隐藏继承的属性

属性类型描述定义在
$enableRateLimitHeaders boolean 是否在响应中包含速率限制标头. yii\filters\RateLimiter
$errorMessage string 超出速率限制时显示的消息. yii\filters\RateLimiter
$except array 此过滤器不适用的动作ID列表, 列表中的动作将不被过滤. yii\base\ActionFilter
$only array 此过滤器应适用的动作ID列表, 仅列表中的动作被过滤. yii\base\ActionFilter
$owner yii\base\Component|null 该行为的所有者. yii\base\Behavior
$request yii\web\Request 当前请求. yii\filters\RateLimiter
$response yii\web\Response 要发送的响应. yii\filters\RateLimiter
$user yii\filters\RateLimitInterface|Closure 实现 RateLimitInterface 的用户对象. yii\filters\RateLimiter

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的已命名方法. yii\base\BaseObject
__construct() 构造函数. yii\base\BaseObject
__get() 返回对象属性的值. yii\base\BaseObject
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\BaseObject
__set() 设置对象属性的值. yii\base\BaseObject
__unset() 将对象属性设置为null. yii\base\BaseObject
addRateLimitHeaders() 将速率限制标头添加到响应中. yii\filters\RateLimiter
afterAction() 执行动作后立即调用此方法. yii\base\ActionFilter
afterFilter() yii\base\ActionFilter
attach() 将行为对象附加到组件. yii\base\ActionFilter
beforeAction() 在执行动作之前(在所有可能的过滤器之后)立即调用该方法. yii\filters\RateLimiter
beforeFilter() yii\base\ActionFilter
canGetProperty() 返回一个值, 指示属性是否可读. yii\base\BaseObject
canSetProperty() 返回一个值, 指示属性是否可写. yii\base\BaseObject
checkRateLimit() 检查速率限制是否超出. yii\filters\RateLimiter
className() 返回此类的完全限定名称. yii\base\BaseObject
detach() 从组件中分离行为对象. yii\base\ActionFilter
events() 声明 所有者 事件的事件处理程序. yii\base\Behavior
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\BaseObject
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\BaseObject
init() 初始化对象. yii\filters\RateLimiter

受保护的方法

隐藏继承的方法

方法描述定义在
getActionId() 通过将 yii\base\Action::$uniqueId 转换为相对于模块的ID来返回动作ID. yii\base\ActionFilter
isActive() 返回一个值, 指示过滤器对于给定动作是否处于活动状态. yii\base\ActionFilter

属性详情

$enableRateLimitHeaders public 属性

是否在响应中包含速率限制标头.

$errorMessage public 属性

超出速率限制时显示的消息.

public string $errorMessage 'Rate limit exceeded.'
$request public 属性

当前请求. 如果未设置, 将使用应用程序请求(request)组件.

public yii\web\Request $request null
$response public 属性

要发送的响应. 如果未设置, 将使用应用程序响应(response)组件.

$user public 属性

实现 RateLimitInterface 的用户对象. 如果未设置, 它将使用Yii::$app->user->getIdentity(false)的值. 自版本2.0.38起, 可以提供闭包功能, 以便在运行时分配用户身份. 如果不使用标准的Yii::$app->user组件, 建议使用闭包来分配用户身份. 请参阅以下示例:

'user' => function() {
    return Yii::$app->apiUser->identity;
}

如果未设置, 则将采用Yii::$app->user->getIdentity(false)的值.

方法详情

addRateLimitHeaders() public 方法

将速率限制标头添加到响应中.

public void addRateLimitHeaders ( $response, $limit, $remaining, $reset )
$response yii\web\Response
$limit integer

一段时间内允许的最大请求数.

$remaining integer

当前期间内允许的剩余请求数.

$reset integer

再次达到最大允许请求数之前要等待的秒数.

beforeAction() public 方法

在执行动作之前(在所有可能的过滤器之后)立即调用该方法.

你可以重写此方法, 以便为该动作做最后的准备.

public boolean beforeAction ( $action )
$action yii\base\Action

要执行的动作.

return boolean

该动作是否应该继续执行.

checkRateLimit() public 方法

检查速率限制是否超出.

public void checkRateLimit ( $user, $request, $response, $action )
$user yii\filters\RateLimitInterface

当前用户.

$request yii\web\Request
$response yii\web\Response
$action yii\base\Action

要执行的动作.

throws yii\web\TooManyRequestsHttpException

如果超出速率限制.

init() public 方法

初始化对象.

在使用给定的配置初始化对象之后, 在构造函数的末尾调用此方法.

public void init ( )