📅  最后修改于: 2021-01-05 10:35:29             🧑  作者: Mango
中间件充当用户和请求之间的层。这意味着,当用户请求服务器时,请求将通过中间件,然后中间件将验证请求是否经过身份验证。如果用户的请求已通过身份验证,则该请求将发送到后端。如果用户请求未通过身份验证,则中间件会将用户重定向到登录屏幕。
除身份验证外,其他中间件可用于执行各种任务。例如,CORS中间件负责将标头添加到所有响应。
Laravel框架包括一些中间件,例如身份验证和CSRF保护,所有这些都位于app / Http / Middleware目录中。
我们可以说中间件是一个http请求过滤器,您可以在其中检查条件。
在中间件中,我们将讨论以下主题:
输入命令php artisan make:middleware'中间件名称' 。
在上面的屏幕中,我们输入命令“ php artisan make:middleware CheckAge ”,其中CheckAge是中间件的名称。上面的窗口显示已成功创建名为“ CheckAge ”的中间件。
要查看是否已创建CheckAge中间件,请转到您的项目。我们的项目名称为laravelproject,因此中间件的路径为: C:\ xampp \ htdocs \ laravelproject \ app \ Http \ Middleware 。
中间件既可以应用于所有URL,也可以应用于某些特定URL。
让我们将中间件应用于所有URL。
步骤1:打开kernel.php文件。如果我们想将中间件应用于所有URL,则在中间件数组中添加中间件的路径。
[
\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,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
*
@var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware
\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware
\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
}
步骤2:在Git Bash窗口中输入php artisan serve命令。
步骤3:打开您已创建为中间件的CheckAge.php文件。
步骤4:现在,输入URL'http:// localhost / laravelproject / public / '。
让我们将中间件应用于某些特定的路由。
步骤1:打开kernel.php文件。如果我们要将中间件应用于某些特定的路由
[
\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,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
*
@var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware
\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware
\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'age' => \App\Http\Middleware\CheckAge::class ];
}
在上面的代码中,我们添加了代码,即“ age” => \ App \ Http \ Middleware \ CheckAge :: class' ,其中age是中间件的名称。现在,我们可以将“年龄”中间件用于某些特定的路线。
步骤2:打开您已创建为中间件的CheckAge.php文件。
步骤3:在web.php文件中添加中间件代码。
Route::Get('/',function()
{
return view('welcome');
})-> middleware('age');
Route::Get('user/profile',function()
{
return "user profile";
});
在上面的代码中,我们在'/'根URL中添加了中间件,而在'user / profile'URL中未添加中间件。
输出:
当我们访问根URL时,输出将是:
上面的输出表明,中间件代码在显示“ hello world”时也已被访问。
当我们访问URL(即/ user / profile)时,输出将是:
上面的输出表明尚未访问中间件代码。
在URL中传递参数时。
web.php
Route::Get('/{age}',function($age)
{
return view('welcome');
})-> middleware('age');
CheckAge.php
输出量
中间件也可用于检查条件。让我们通过一个例子来理解。
Route::Get('/{age}',function($age)
{
return view('welcome');
})-> middleware('age');
age>10)
{
echo "Age is greater than 10";
}
else
{
echo"Age is not greater than 10";
}
return $next($request);
}}
输出: