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 应用/ 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 。添加该文件中以灰色突出显示的行来注册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步 - 输出将显示如下图所示。 可终止的中间件 响应已发送到浏览器后,终止中间件执行一些任务。这可以通过在中间件中使用 terminate 方法创建中间件来完成。终止中间件应该注册到全局中间件。terminate方法将接收两个参数 $ request 和 $ response。 可以按照以下代码中所示创建终止方法。 例 第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步 - 输出将显示如下图所示。 Laravel路由 Laravel命名空间