- Laravel 教程
- Laravel - 主页
- Laravel - 概述
- Laravel - 安装
- Laravel - 应用程序结构
- Laravel - 配置
- Laravel - 路由
- Laravel - 中间件
- Laravel - 命名空间
- Laravel - 控制器
- Laravel - 请求
- Laravel-Cookie
- Laravel - 响应
- Laravel - 视图
- Laravel - 刀片模板
- Laravel - 重定向
- Laravel - 使用数据库
- Laravel - 错误和日志记录
- Laravel - 表单
- Laravel - 本地化
- Laravel - 会话
- Laravel - 验证
- Laravel - 文件上传
- Laravel - 发送电子邮件
- Laravel - AJAX
- Laravel - 错误处理
- Laravel - 事件处理
- Laravel - 外观
- Laravel - 合约
- Laravel - CSRF 保护
- Laravel - 身份验证
- Laravel - 授权
- Laravel - Artisan 控制台
- Laravel - 加密
- Laravel - 哈希
- 了解发布流程
- Laravel - 访客用户门
- Laravel - Artisan 命令
- Laravel - 分页自定义
- Laravel - 转储服务器
- Laravel - 操作 URL
- Laravel 有用资源
- Laravel - 快速指南
- Laravel - 有用的资源
- Laravel - 讨论
Laravel - 中间件
中间件充当请求和响应之间的桥梁。它是一种过滤机制。本章向您介绍 Laravel 中的中间件机制。
Laravel 包含一个中间件,用于验证应用程序的用户是否经过身份验证。如果用户通过身份验证,则重定向到主页,否则,它重定向到登录页面。
可以通过执行以下命令来创建中间件 -
php artisan make:middleware <middleware-name>
将<middleware-name>替换为您的中间件的名称。您创建的中间件可以在app/Http/Middleware目录中看到。
例子
观察以下示例以了解中间件机制 -
步骤 1 - 现在让我们创建 AgeMiddleware。要创建它,我们需要执行以下命令 -
php artisan make:middleware AgeMiddleware
步骤 2 - 成功执行命令后,您将收到以下输出 -
步骤 3 - AgeMiddleware将在app/Http/Middleware处创建。新创建的文件将包含已为您创建的以下代码。
<?php
namespace App\Http\Middleware;
use Closure;
class AgeMiddleware {
public function handle($request, Closure $next) {
return $next($request);
}
}
注册中间件
我们需要在使用每个中间件之前注册它。Laravel 中有两种类型的中间件。
- 全局中间件
- 路由中间件
全局中间件将在应用程序的每个 HTTP 请求上运行,而路由中间件将分配给特定的路由。中间件可以在app/Http/Kernel.php 注册。该文件包含两个属性$middleware和$routeMiddleware。$middleware属性用于注册全局中间件,$routeMiddleware属性用于注册路由特定中间件。
要注册全局中间件,请在 $middleware 属性的末尾列出该类。
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, ];
要注册特定于路由的中间件,请将键和值添加到 $routeMiddleware 属性。
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, ];
例子
我们在前面的示例中创建了AgeMiddleware 。我们现在可以在特定于路由的中间件属性中注册它。该注册的代码如下所示。
以下是app/Http/Kernel.php的代码-
<?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\Middleware\AgeMiddleware::class,
];
}
中间件参数
我们还可以通过中间件传递参数。例如,如果您的应用程序具有不同的角色,如用户、管理员、超级管理员等,并且您想根据角色对操作进行身份验证,则可以通过使用中间件传递参数来实现。我们创建的中间件包含以下函数,我们可以在$next参数之后传递自定义参数。
public function handle($request, Closure $next) {
return $next($request);
}
例子
步骤 1 - 通过执行以下命令创建 RoleMiddleware -
php artisan make:middleware RoleMiddleware
步骤 2 - 成功执行后,您将收到以下输出 -
步骤3 - 在新创建的RoleMiddlewareat app/Http/Middleware/RoleMiddleware.php的handle 方法中添加以下代码。
<?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 。在该文件中添加以灰色突出显示的行以注册 RoleMiddleware。
步骤 5 - 执行以下命令来创建TestController -
php artisan make:controller TestController --plain
步骤 6 - 成功执行上述步骤后,您将收到以下输出 -
步骤 7 - 将以下代码行复制到app/Http/TestController.php文件。
应用程序/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.";
}
}
步骤 8 - 在app/Http/routes.php文件中添加以下代码行。
应用程序/Http/routes.php
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
步骤 9 - 访问以下 URL 以使用参数测试中间件
http://localhost:8000/role
步骤 10 - 输出将如下图所示。
可终止中间件
可终止中间件在响应发送到浏览器后执行某些任务。这可以通过创建一个中间件并在中间件中包含终止方法来完成。可终止中间件应注册到全局中间件。终止方法将接收两个参数$request和$response。可以创建 Terminate 方法,如以下代码所示。
例子
步骤 1 -通过执行以下命令创建TerminateMiddleware 。
php artisan make:middleware TerminateMiddleware
步骤 2 - 上述步骤将产生以下输出 -
步骤 3 - 将以下代码复制到app/Http/Middleware/TerminateMiddleware.php中新创建的TerminateMiddleware中。
<?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 -在app\Http\Kernel.php文件中注册TerminateMiddleware。在该文件中添加以灰色突出显示的行以注册 TerminateMiddleware。
步骤 5 - 执行以下命令创建ABCController。
php artisan make:controller ABCController --plain
步骤 6 - 成功执行 URL 后,您将收到以下输出 -
步骤 7 - 将以下代码复制到app/Http/ABCController.php文件。
应用程序/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.";
}
}
步骤 8 - 在app/Http/routes.php文件中添加以下代码行。
应用程序/Http/routes.php
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'ABCController@index',
]);
步骤 9 - 访问以下 URL 来测试可终止中间件。
http://localhost:8000/terminate
步骤 10 - 输出将如下图所示。
