創(chuàng)建中間件
php artisan make:middleware PrintHelloworld
自動(dòng)生成了 middleware
文件:app\Http\Middleware\PrintHelloworld.php
修改中間件文件
app\Http\Middleware\PrintHelloworld.php
<?php
namespace App\Http\Middleware;
use Closure;
class PrintHelloworld
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
dump('Hello World!');
return $next($request);
}
}
注冊(cè)中間件
修改 app\Http\kernel.php
文件;有全局注冊(cè)跃赚、grand注冊(cè)州藕、路由注冊(cè)三種方式扩氢;
全局注冊(cè):作用于所有路由
.
.
.
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\Fruitcake\Cors\HandleCors::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\PrintHelloworld::class,
];
.
.
.
訪問主頁(yè), dump
語(yǔ)句會(huì)輸首先輸出效五。
路由注冊(cè):作用于注冊(cè)的路由
修改 app\Http\kernel.php
中的 protected $routeMiddleware
部分;
.
.
.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'printinfo' => \App\Http\Middleware\PrintHelloworld::class,
];
.
.
.
指定單個(gè)路由
修改 routes\web.php
文件
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
})->middleware('printinfo');
這樣,這個(gè)中間件只會(huì)在訪問指定路由時(shí)起作用蝎宇;
指定一組路由
修改 routes\web.php
文件
<?php
use Illuminate\Support\Facades\Route;
Route::resource('test', 'TestController')->middleware('printinfo');
也可以在控制器中的 construct
函數(shù)中調(diào)用
public function __construct()
{
//這種方式會(huì)對(duì)該控制器里的所有方法都產(chǎn)生作用
//$this->middleware('printinfo);
//這種方式指定對(duì)控制器里的某個(gè)方法產(chǎn)生作用
$this->middleware('checklog', [
'only' => ['edit', 'update']
]);
//這種方式排除控制器里的某個(gè)方法
$this->middleware('checklog', [
'except' => ['edit', 'update']
]);
}
作用于 grand
修改 app\Http\kernel.php
中的 protected $middlewareGroups
部分;
.
.
.
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\PrintHelloworld::class,
],
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
.
.
.