Class yii\filters\RateLimiter
RateLimiter implements a rate limiting algorithm based on the leaky bucket algorithm.
您可以通过将 RateLimiter 作为行为附加到控制器或模块来使用,如下所示,
public function behaviors()
{
return [
'rateLimiter' => [
'class' => \yii\filters\RateLimiter::className(),
],
];
}
当用户超过其速率限制时,RateLimiter 将引发 yii\web\TooManyRequestsHttpException 异常。
请注意 RateLimiter 需要 $user 实现[RateLimitInterface]。 如果 $user 未设置或未实现 yii\filters\RateLimitInterface 则不会执行任何操作。
公共属性
属性 | 类型 | 描述 | 被定义在 |
---|---|---|---|
$enableRateLimitHeaders | boolean | 是否在响应中包含速率限制 headers | yii\filters\RateLimiter |
$errorMessage | string | 超过速率限制时显示的消息 | yii\filters\RateLimiter |
$except | array | List of action IDs that this filter should not apply to. | yii\base\ActionFilter |
$only | array | List of action IDs that this filter should apply to. | yii\base\ActionFilter |
$owner | yii\base\Component|null | The owner of this behavior | yii\base\Behavior |
$request | yii\web\Request | 当前的请求。如果未设置,则将使用 request 应用程序组件。 |
yii\filters\RateLimiter |
$response | yii\web\Response | 要发送的响应。如果未设置,则将使用 response 应用程序组件。 |
yii\filters\RateLimiter |
$user | yii\filters\RateLimitInterface | 实现 RateLimitInterface 的用户对象。
如果未设置,它将从 Yii::$app->user->getIdentity(false) 取值。 |
yii\filters\RateLimiter |
公共方法
方法 | 描述 | 被定义在 |
---|---|---|
__call() | Calls the named method which is not a class method. | yii\base\BaseObject |
__construct() | Constructor. | yii\base\BaseObject |
__get() | Returns the value of an object property. | yii\base\BaseObject |
__isset() | Checks if a property is set, i.e. defined and not null. | yii\base\BaseObject |
__set() | Sets value of an object property. | yii\base\BaseObject |
__unset() | Sets an object property to null. | yii\base\BaseObject |
addRateLimitHeaders() | 将速率限制 headers 添加到响应中。 | yii\filters\RateLimiter |
afterAction() | 执行动作后立即调用此方法。 您可以覆盖此方法以对操作执行一些后处理。 | yii\base\ActionFilter |
afterFilter() | yii\base\ActionFilter | |
attach() | Attaches the behavior object to the component. | yii\base\Behavior |
beforeAction() | This method is invoked right before an action is to be executed (after all possible filters.) You may override this method to do last-minute preparation for the action. | yii\filters\RateLimiter |
beforeFilter() | yii\base\ActionFilter | |
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\BaseObject |
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\BaseObject |
checkRateLimit() | 检查是否超过了比率限额。 | yii\filters\RateLimiter |
className() | Returns the fully qualified name of this class. | yii\base\BaseObject |
detach() | Detaches the behavior object from the component. | yii\base\Behavior |
events() | Declares event handlers for the $owner's events. | yii\base\Behavior |
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\BaseObject |
hasProperty() | Returns a value indicating whether a property is defined. | yii\base\BaseObject |
init() | Initializes the object. | yii\filters\RateLimiter |
受保护的方法
方法 | 描述 | 被定义在 |
---|---|---|
getActionId() | 通过将 yii\base\Action::$uniqueId 转换为相对于模块的 ID 来返回动作 ID。 | yii\base\ActionFilter |
isActive() | 返回一个值,该值指示过滤器对于给定操作是否处于活动状态。 | yii\base\ActionFilter |
属性详情
是否在响应中包含速率限制 headers
超过速率限制时显示的消息
当前的请求。如果未设置,则将使用 request
应用程序组件。
要发送的响应。如果未设置,则将使用 response
应用程序组件。
实现 RateLimitInterface 的用户对象。
如果未设置,它将从 Yii::$app->user->getIdentity(false)
取值。
方法详情
将速率限制 headers 添加到响应中。
public void addRateLimitHeaders($response, $limit, $remaining, $reset) | ||
$response | yii\web\Response | |
$limit | integer | 一段时间内允许的最大请求数 |
$remaining | integer | 当前期间内允许的剩余请求数 |
$reset | integer | 再次具有允许的最大请求数之前等待的秒数 |
This method is invoked right before an action is to be executed (after all possible filters.) You may override this method to do last-minute preparation for the action.
public boolean beforeAction($action) | ||
$action | yii\base\Action | 要执行的动作。 |
return | boolean | 该动作是否应继续执行。 |
---|
检查是否超过了比率限额。
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 | 如果超过比率限制 |
---|
Initializes the object.
This method is invoked at the end of the constructor after the object is initialized with the given configuration.
public void init() |