路由模型綁定
路由
直接綁定模型
,直接返回根據(jù)路由url 的格式的數(shù)據(jù)耿眉,省略了一步寫查詢的操作靖秩。
下面看個例子:
Route::get('/user/{user}', function(\App\User $user){
// User::findOrFail($user); 直接省略了
// 指定的 {user} 是 ID须眷,換成別的就不行了
// 并且 傳遞的參數(shù)名,和函數(shù)里傳遞的參數(shù)名必須是一致的
return $user;
});
如果想通過別的條件沟突,來直接返回查詢結(jié)果花颗,怎么做,看下面一個列子:
// 首先你得在 路由服務(wù)提供 RouteServiceProvider 里注冊綁定 你要通過什么條件的參數(shù)名
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) {
// 自己填寫綁定的方法扩劝,對于函數(shù)參數(shù)名就沒有什么嚴(yán)格要求了
return $user;
});
擴(kuò)展: 在測試新特性時,在 tinker (php artisan tinker)中使用了 factory 工廠模式來填充一些測試數(shù)據(jù)
Psy Shell v0.7.2 (PHP 7.0.13-1+deb.sury.org~xenial+1 — cli) by Justin Hileman
>>> namespace App;
=> null
// 參數(shù)1 傳遞的模型 參數(shù)2 times 偽造數(shù)據(jù)的條數(shù)
>>> 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,
},
訪問次數(shù)限制 throttle
應(yīng)用場景:
限制對客戶端請求服務(wù)器API數(shù)據(jù)接口在一分鐘內(nèi)或一段時間內(nèi)請求次數(shù)的限定,減少服務(wù)器負(fù)載的壓力棒呛。
先安裝一個 Httpie 工具聂示,這里我是在ubuntu 下安裝的
$ sudo apt-get install httpie
或者:
$ brew install httpie (首先你要安裝 brew)
我們來對 上節(jié)使用的路由進(jìn)行限定下
Route::get('/user/{name}', function (\App\User $user) {
return $user;
})->middleware('throttle');
默認(rèn): `throttle` 一分鐘內(nèi)限定請求次數(shù)為 60 次。
想要修改次數(shù)条霜,如下:
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 // 一分鐘內(nèi)請求次數(shù)
X-RateLimit-Remaining: 59 // 還剩請求次數(shù)
{
"created_at": "2017-03-01 17:16:20",
"email": "342766475@qq.com",
"id": 1,
"name": "Twitch",
"updated_at": "2017-03-01 17:21:38"
}
// 次數(shù)超過了限定就會 返回一個 Too Many Attermpts。
5.2 版本 自帶了 登陸和注冊
執(zhí)行下面的命令,重新訪問你就可以看到了
php artisan make:auth
- 默認(rèn)自帶的 登錄注冊宰睡,會對密碼輸入錯誤5次蒲凶,后就會報一分鐘后再次嘗試。
- 查看auth 的路由 拆内,
double shift
查找Router.php
文件旋圆,然后找到auth
方法,我們就能很清新的看到具體的路由了