猿人旅程

Laravel 5.2 新特性

2017-03-03  本文已影响27人  Junting

路由模型绑定

路由直接绑定模型,直接返回根据路由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

新增了一个 api 的 middleware 中间件

上一篇下一篇

猜你喜欢

热点阅读