路由模型绑定
路由
直接绑定模型
,直接返回根据路由url 的格式的数据,省略了一步写查询的操作。
下面看个例子:
Route::get('/user/{user}', function(\App\User $user){
// User::findOrFail($user); 直接省略了
// 指定的 {user} 是 ID,换成别的就不行了
// 并且 传递的参数名,和函数里传递的参数名必须是一致的
return $user;
});
如果想通过别的条件,来直接返回查询结果,怎么做,看下面一个列子:
// 首先你得在 路由服务提供 RouteServiceProvider 里注册绑定 你要通过什么条件的参数名
public function boot(Router $router)
{
parent::boot($router);
\Route::bind('name', function($user){
return User::where('name', $user)->firstOrFail();
});
}
// 这样绑定后,我们在到routes.php 修改下
Route::get('/user/{name}', function (\App\User $user) {
// 自己填写绑定的方法,对于函数参数名就没有什么严格要求了
return $user;
});
扩展: 在测试新特性时,在 tinker (php artisan tinker)中使用了 factory 工厂模式来填充一些测试数据
Psy Shell v0.7.2 (PHP 7.0.13-1+deb.sury.org~xenial+1 — cli) by Justin Hileman
>>> namespace App;
=> null
// 参数1 传递的模型 参数2 times 伪造数据的条数
>>> factory(User::class, 10)->create();
^[[5~=> Illuminate\Database\Eloquent\Collection {#657
all: [
App\User {#652
name: "Nels Koch",
email: "emard.leonora@example.org",
updated_at: "2017-03-03 07:27:42",
created_at: "2017-03-03 07:27:42",
id: 3,
},
访问次数限制 throttle
应用场景:
限制对客户端请求服务器API数据接口在一分钟内或一段时间内请求次数的限定,减少服务器负载的压力。
先安装一个 Httpie 工具,这里我是在ubuntu 下安装的
$ sudo apt-get install httpie
或者:
$ brew install httpie (首先你要安装 brew)
我们来对 上节使用的路由进行限定下
Route::get('/user/{name}', function (\App\User $user) {
return $user;
})->middleware('throttle');
默认: `throttle` 一分钟内限定请求次数为 60 次。
想要修改次数,如下:
Route::get('/user/{name}', function (\App\User $user) {
return $user;
})->middleware('throttle:3');
安装好后,我们来使用下httpie工具
vagrant@homestead:~$ http http://learnlaravel52.app/user/Twitch
HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/json
Date: Fri, 03 Mar 2017 07:50:40 GMT
Server: nginx/1.11.5
Set-Cookie: XSRF-TOKEN=eyJpdiI6IkZoXC93bkNQVjFFQ1FxaWJwaDZ1YUFBPT0iLCJ2YWx1ZSI6I nBOeThQM0FUeGdoZkZFdUlYUU9NOW15OU0wU3NcLzh0eHRGN2U3d0VPbUdoS3diRlpDZGxoNThRS1hqS UZZUDlpM3FmWDdkZjROR2lhYjdCNVowVlE3UT09IiwibWFjIjoiYWFkOWUwZjk0MDMzMDMzNzg5ZTE4Y TQ2MzZlOTYxZjY0OTA1MWY1ZmVjNzQzNTAzZTFkY2I1N2ZjYTVkM2VmMyJ9; expires=Fri, 03-Mar -2017 09:50:40 GMT; Max-Age=7200; path=/
Set-Cookie: laravel_session=eyJpdiI6ImJPall6ZFpRUlg0dlpnWTA1bmI1Z1E9PSIsInZhbHVl IjoibmZYMmVOc3ViTDVQMSt4SEx0elFuUmRMeUtQMnIrZlZTbDQzeXVVMndURDlKN2VVdExGZFlPOFBZ c0tId1RXTzMwMFd5RUEyYlY0M05LMTBONlh1dXc9PSIsIm1hYyI6IjY0ZmQ3M2Q3N2IxMjk1ZGU3OTll YzA1MzJiZTkxYjZkMDcyZWIzYmZmNzIwYWVjYWE0M2NkOGNjNTA4NjkxNzEifQ%3D%3D; expires=Fr i, 03-Mar-2017 09:50:40 GMT; Max-Age=7200; path=/; HttpOnly
Transfer-Encoding: chunked
X-RateLimit-Limit: 60 // 一分钟内请求次数
X-RateLimit-Remaining: 59 // 还剩请求次数
{
"created_at": "2017-03-01 17:16:20",
"email": "342766475@qq.com",
"id": 1,
"name": "Twitch",
"updated_at": "2017-03-01 17:21:38"
}
// 次数超过了限定就会 返回一个 Too Many Attermpts。
5.2 版本 自带了 登陆和注册
执行下面的命令,重新访问你就可以看到了
php artisan make:auth
- 默认自带的 登录注册,会对密码输入错误5次,后就会报一分钟后再次尝试。
- 查看auth 的路由 ,
double shift
查找Router.php
文件,然后找到auth
方法,我们就能很清新的看到具体的路由了
网友评论