發現前面有些地方其實可以拆成兩三天慢慢講⋯⋯orz
我怎麼才13天就寫到這裡了呢⋯⋯失、失策啊⋯⋯orz
OK,中介層。
Middleware的檔案都在app/Http/Middleware
中,打開可以發現我們一開始從GitHub上clone下來的Laravel Project已經預設了幾個Middleware了,比如登入驗證、CSRF。
要使用Middleware前就跟自訂Artisan指令一樣,要在Kernel.php
上註冊,不過Artisan指令是在app/Console/Kernel.php
,而Middleware則是在app/Http/Kernel.php
。
這裡不得不提PHP的namespace,PHP在5.3之後引入namespace的概念,這東東相當於Java的package,可以解決名稱衝突的問題,如果沒有namespace可能就會看到一堆落落長的檔案名了:)
Middleware的功能相當於在用戶請求跟後端間設個閘門,用最常見的身份驗證來舉栗子,有些頁面我們是禁止非會員的使用者看的,這時當訪問頁面的請求進來,Middleware就會去檢查。如果它是已登入的使用者的請求,就顯示頁面給他;如果它不是,我們可能就會將頁面導向登入頁。
生成指令:
php artisan make:middleware Cat
新生成的文件內容只有這樣:
<?php
namespace App\Http\Middleware;
use Closure;
class Cat
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
註冊Middleware跟斯斯一樣有三種(?):
放在這裡的是任何請求都會經過的Middleware。
// Kernel.php
protected $middleware = [
\App\Http\Middleware\CheckForMaintenanceMode::class,
// 以下略⋯⋯
];
如果是要指派給特定路由使用,可以在這裡設定一個鍵。
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
// 以下略⋯⋯
];
路由要使用時就這樣指派:
Route::get('/Example', ['middleware' => 'auth', function () {
//
}]);
要多個Middleware同時使用,就可以使用群組的方式。
// Kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
// 以下略⋯⋯
],
'api' => [
'throttle:60,1',
'bindings',
],
];
一樣是指派給路由去使用:
Route::group(['middleware' => ['web']], function () {
//
});