2016-01-07 66 views
3

我在Laravel看到this tutorial約5.2油門API油門5.2

看來,節流只是用於API的,但爲什麼不能用於其他控制器的東西,以避免人們發送100次通過郵差的相同形式。

我告訴人們,因爲在Kernel.php,現在,中間件顯然Web和API之間劃分: Kernel.php:Laravel 5.2

+0

嗯,它只是一箇中間件,因此可以附加到任何路由/控制器,無論該路由是API還是不。它僅限制IP地址在一段時間內能夠擊中一組路線的次數。所以它可以用來限制提交表單,正如你的建議,100次。 –

+0

但我要說的是,它似乎設計爲只用於API,我不明白這個決定 –

+0

你爲什麼這麼說?儘管Laravel被許多用戶羣使用來創建API,因此任何支持API開發的決定都會說實話。 –

回答

5

你可以把它應用到網頁爲好。根據您的意見判斷,您對中間件的新功能感到困惑,主要是Middleware Groups

5.2帶來了一種將中間件分組的方法,就像之前使用Route組一樣。在5.1中,你會做這樣的事情:

Route::group(['prefix' => 'api', 'middleware'=>'auth,custom_middleware,permission:edit_permissions'], function() { 
    Route::post('permissions/{id}/store', ['uses'=>'[email protected]']); 
}); 

這仍然是完全有效的,但如果你想添加另一條路線組具有相同的中間件,你必須要麼忙裏忙外的組織,使他們被嵌套在一個單獨的路由組下方應用這些中間件或者你不得不復制粘貼中間件,這兩個都不是很理想。隨着5.2,你所要做的就是這樣:

Kernel.php 

protected $middlewareGroups = [ 
    'permissions_api' => [ 
     'auth', 
     'custom_middleware', 
     'permission:edit_permissions', 
    ] 
]; 

routes.php 

Route::group(['middleware' => ['permissions_api']], function() { 
    Route::post('permissions/{id}/store', ['uses'=>'[email protected]']); 
}); 

Route::group(['middleware' => ['permissions_api']], function() { 
    Route::post('permissions/{id}/update', ['uses'=>'[email protected]']); 
}); 

所以你可以將這些中間件分組並將它們應用到這些組中。這就是你所看到的apiweb。這只是Laravel提供的默認中間件組,您可以根據需要進行修改。 throttle可作爲您可能需要它的中間件。下面都是非常有效的

Route::group(['middleware' => ['throttle:60,1']], function() { 
    Route::post('permissions/{id}/update', ['uses'=>'[email protected]']); 
}); 

protected $middlewareGroups = [ 
    'permissions_api' => [ 
     'auth', 
     'custom_middleware', 
     'permission:edit_permissions', 
     'throttle:60,1' 
    ] 
]; 

所以throttle僅僅是一箇中間件和任何中間件可以只適用。它在Kernel.php中被定義爲'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,60,1只是中間件參數,它們被添加到5.1