php artisan make:middleware <middleware-name>
使用你的中間件名稱替換<middleware-name>。創建可以看到中間件在 app/Http/Middleware 目錄。
示例
php artisan make:middleware AgeMiddleware

第3步 − AgeMiddlware 會在 app/Http/Middleware 檔中創建。新創建的檔將自動創建下麵代碼:
<?php
namespace App\Http\Middleware;
use Closure;
class AgeMiddleware {
public function handle($request, Closure $next) {
return $next($request);
}
}
註冊中間件
-
全局中間件
-
路由中間件
全局中間件將在應用程式的每個HTTP請求運行,而路由中間件將被分配到一個特定的路由。中間件可在 app/Http/Kernel.php 註冊.
該檔包含兩個屬性: $middleware 和 $routeMiddleware。$middleware 屬性用於註冊全局中間件,$routeMiddleware屬性用於註冊路由指定中間件。
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \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, ];
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, ];
示例
我們已經在前面的例子中已創建 AgeMiddleware 中間件。 現在,我們可以在具體的路由中間件屬性登記。註冊代碼如下所示。
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel {
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\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,
];
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'Age' => \App\Http\Middlware\AgeMiddleware::class,
];
}
中間件參數
我們也可以傳遞中間件參數。例如,如果您的應用程式有不同角色,如用戶,管理員,超級管理員等,並且要驗證基於角色的動作,這可以通過參數傳遞中間件來實現。我們創建的中間件包含以下功能,我們可以通過 $next 參數之後,自定義參數。
public function handle($request, Closure $next) {
return $next($request);
}
示例
php artisan make:middleware RoleMiddleware

第3步 − 添加以下代碼到新創建的角色中間件的處理方法 - app/Http/Middleware/RoleMiddleware.php.
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
第4步 − 在 app\Http\Kernel.php 檔中註冊角色中間件。 加入灰色突出的線條的是在該檔中註冊 RoleMiddleware 中間件。
php artisan make:controller TestController

app/Http/TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller {
public function index(){
echo "<br>Test Controller.";
}
}
app/Http/routes.php
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);

可終止的中間件
回應已經發送給流覽器後可終止中間件執行一些任務。這可以通過使用創建中間件“終止”方法的中間件來實現。可終止中間件會註冊全局中間件。該終止方法將接受兩個參數:$request 和 $response。終止方法可以被創建,如在下面顯示的代碼。
示例
php artisan make:middleware TerminateMiddleware

第3步 - 複製下麵的代碼到新創建檔 - TerminateMiddleware 在 app/Http/Middleware/TerminateMiddleware.php 檔中如下:
<?php
namespace App\Http\Middleware;
use Closure;
class TerminateMiddleware {
public function handle($request, Closure $next) {
echo "Executing statements of handle method of TerminateMiddleware.";
return $next($request);
}
public function terminate($request, $response){
echo "<br>Executing statements of terminate method of TerminateMiddleware.";
}
}
第4步 − 註冊 TerminateMiddleware 到 app\Http\Kernel.php 檔中.
加了灰色突出的線條的是該檔中註冊的 TerminateMiddleware 中間件。
php artisan make:controller ABCController

app/Http/ABCController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ABCController extends Controller {
public function index(){
echo "<br>ABC Controller.";
}
}
app/Http/routes.php
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'ABCController@index',
]);
http://localhost:8000/terminate

