自定义路由逻辑
- 如果想要使用自定义的路由解析规则,可以使用
Route:bind
方法。传入bind
方法中的闭包函数(Closure
)将会接收到URL中大括号对应的值,并返回需要注入到路由中的类的实例:
public function boot()
{
parent::boot();
Route::bind('user', function($value){
return App\User::where('name', $value)->firstOrFail();
});
}
- 或者你可以重写
Eloquent
中的resolveRouteBinding
方法。此方法将会接收到URL中大括号对应的值,并返回需要注入到路由中的类的实例:
public function resolveRouteBinding($value)
{
return $this->where('name', $value)->firstOrFail();
}
限流
laravel包含限制访问应用中特定路由次数的中间件。如果想要开启此功能,需要将throttle
中间件分配给路由或者路由组。throttle
中间件接收两个参数来设置指定时间内的最大请求数。例如,指定授权用户在一分钟内最多访问60次下列路由组:
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
Route::get('/user', function () {
//
});
});
- 动态限流
你可以指定基于授权User
模型的属性的动态访问的最大请求数。例如:如果你的User
模型包含一个rate_limit
的属性,你就可以传递此属性到throttle
中间件,用来计算最大请求次数:
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
- 单独设置访客和认证用户的限流
可以为访客和认证用户设置不同的限流。例如,你可以为访客设置每分钟最大请求数为10,认证用户每分钟最大请求数为60:
Route::middleware('throttle:10|60,1')->group(function () {
//
});
你可以将此功能与动态限流结合。例如,如果你的User
模型包含rate_limit
属性,你可以将此属性传入throttle
中间件中,用来计算认证用户的最大访问数:
Route::middleware('auth:api', 'throttle:10|rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
网友评论