另外一個會幫忙過濾篩選的功能,中介層,之前在第11章 route的時候有提到可以加上中介層,它分為前中介層跟後中介層,主要是看被執行的時間,接下來看看要怎麼使用。
一樣可以下指令建立Middleware php artisan make:middleware CheckName
接著就可以在 App\Http\Middleware
編輯前中介層 或是 後中介層
<?php
namespace App\Http\Middleware;
use Closure;
class CheckName //BeforeMiddleware
{
public function handle($request, Closure $next)
{
// Perform action
if ('TestName' !== $request->name) {
return redirect('home');
}
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}
註冊中介層,註冊的位置是app/Http/Kernel.php
,有三種註冊方式(以影響的範圍區分)
$middleware
底下加入middleware$routeMiddleware
底下加入key(自行設定)和middleware$middlewareGroups
底下加入key(自行設定) 和想要綁定的middleware,或是可以直接拿2設定好的key值加入/**
* 應用程式的路由中介層群組。
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
'auth:api',
],
];
throttle
代表的是訪問頻率限制,throttle:60,1
一分鐘內被訪問最高次數為60次//使用單一middleware
Route::get('admin/profile', ['middleware' => 'auth', function () {
//
}]);
//使用多個middleware,上面改成用array
Route::get('/', ['middleware' => ['first', 'second'], function () {
//或是加在最後
Route::get('/', function () {
//
}])->middleware(['first', 'second']);
結論: 前面提過的Request Validation跟中介層的應用不太一樣,在我的理解上Request會比較專注在進來的input格式與內容,而中介層是可以更廣泛的應用例如紀錄log或是CSRF保護等等的使用,其他還有關於帶入參數或是中止中介層等等的使用方法,有興趣的話可以參考官網。
參考連結: