laravel 中间件
中间件充当请求和响应之间的桥梁。这是一种过滤机制。本章向您解释laravel中的中间件机制。
laravel包含一个中间件,用于验证应用程序的用户是否已通过身份验证。如果用户通过身份验证,则会重定向到主页,否则重定向到登录页面。
中间件可以通过执行以下命令来创建 -
php artisan make:middleware <middleware-name> </middleware-name>
将 < middleware-name>替换为 中间件的名称 。您创建的中间件可以在 app / http / middleware 目录中看到。
例
观察以下示例以了解中间件机制 -
第1步 - 让我们现在创建agemiddleware。 要创建它,我们需要执行以下命令 -
php artisan make:middleware agemiddleware
第2步 - 成功执行该命令后,您将收到以下输出 -
第3步 - agemiddleware 将在 app / http / middleware中 创建。新创建的文件将为您创建以下代码。
namespace app\http\middleware; use closure; class agemiddleware { public function handle($request, closure $next) { return $next($request); } }</pre--><h2>注册中间件</h2>
在使用之前,我们需要注册每个中间件。laravel中有两种类型的中间件。
<ul> <li>全球中间件</li> <li>路由中间件</li> </ul>在 <strong>全球中间件</strong> 将应用的每个http请求运行,而 <strong>路由中间件</strong> 将被分配到一个特定的路线。中间件可以在 <strong>app / http / kernel.php上注册。</strong> 该文件包含两个属性 <strong>$ middleware</strong> 和 <strong>$ routemiddleware</strong> 。 <strong>$ middleware</strong> 属性用于注册全局中间件, <strong>$ routemiddleware</strong> 属性用于注册路由特定中间件。
要注册全局中间件,请在$ 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, ];<h3>例</h3>我们在前面的例子中创建了 <strong>agemiddleware</strong> 。我们现在可以在路由特定的中间件属性中注册它。下面显示了该注册的代码。
以下是 <strong>app / http / kernel.php</strong> 的代码-
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, ]; }<h2>中间件参数</h2>
我们也可以通过中间件传递参数。例如,如果您的应用程序具有不同的角色,如用户,管理员,超级管理员等,并且您希望基于角色对操作进行身份验证,则可以通过向中间件传递参数来实现此操作。我们创建的中间件包含以下函数,我们可以在 <strong>$ next</strong> 参数后传递我们的自定义参数。
public function handle($request, closure $next) { return $next($request); }<h3>例</h3><strong>第1步</strong> - 通过执行以下命令创建rolemiddleware -
php artisan make:middleware rolemiddleware<strong>第2步</strong> - 成功执行后,您将收到以下输出 -
<img src="/public/core/edit/php/../attached/20231217141745_94152.jpg" alt="" border="0" />
<strong>第3步</strong> - 在新创建的rolemiddlewareat <strong>应用/ http / middleware / rolemiddleware.php</strong> 的句柄方法中添加以下代码 <strong>。</strong>
namespace app\http\middleware; use closure; class rolemiddleware { public function handle($request, closure $next, $role) { echo "role: ".$role; return $next($request); } }</pre--><strong>第4步</strong> - 在 <strong>app \ http \ kernel.php</strong> 文件中注册 <strong>rolemiddleware</strong> 。添加该文件中以灰色突出显示的行来注册rolemiddleware。
<img src="/public/core/edit/php/../attached/20231217141824_77722.jpg" alt="" border="0" />
<strong>第5步</strong> - 执行以下命令来创建 <strong>testcontroller</strong> -
php artisan make:controller testcontroller --plain<strong>第6步</strong> - 成功执行上述步骤后,您将收到以下输出 -
<img src="/public/core/edit/php/../attached/20231217141927_21931.jpg" alt="" border="0" />
<strong>第7步</strong> - 将以下代码行复制到 <strong>app / http / testcontroller.php</strong> 文件中。
<strong>应用程序/ http / testcontroller.php</strong>
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 " test controller."; } }<strong>第8步</strong> - 在 <strong>app / http / routes.php</strong> 文件中添加以下代码行。
<strong>应用程序/ http / routes.php文件</strong>
route::get('role',[ 'middleware' => 'role:editor', 'uses' => 'testcontroller@index', ]);<strong>第9步</strong> - 访问以下url以使用参数测试中间件
http://localhost:8000/role<strong>第10步</strong> - 输出将显示如下图所示。
<img src="/public/core/edit/php/../attached/20231217142002_35834.jpg" alt="" border="0" />
<h2>可终止的中间件</h2>
响应已发送到浏览器后,终止中间件执行一些任务。这可以通过在中间件中使用 <strong>terminate</strong> 方法创建中间件来完成。终止中间件应该注册到全局中间件。terminate方法将接收两个参数 <strong>$ request</strong> 和 <strong>$ response。</strong> 可以按照以下代码中所示创建终止方法。
<h3>例</h3><strong>第1步</strong> - 通过执行以下命令创建 <strong>terminatemiddleware</strong> 。
php artisan make:middleware terminatemiddleware<strong>第2步</strong> - 上述步骤将产生以下输出 -
<img src="/public/core/edit/php/../attached/20231217142033_92770.jpg" alt="" border="0" />
<strong>第3步</strong> - 将以下代码复制到 <strong>app / http / middleware / terminatemiddleware.php中</strong> 新创建的 <strong>terminatemiddleware</strong> 中 <strong>。</strong>
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 " executing statements of terminate method of terminatemiddleware."; } }<strong>第4步</strong> - 在 <strong>app \ http \ kernel.php</strong> 文件中注册 <strong>terminatemiddleware</strong> 。添加该文件中以灰色突出显示的行来注册terminatemiddleware。 <em>**</em>
<img src="/public/core/edit/php/../attached/20231217142107_45919.jpg" alt="" border="0" />
<strong>第5步</strong> - 执行以下命令创建 <strong>abccontroller</strong> 。
php artisan make:controller abccontroller --plain<strong>第6步</strong> - 成功执行url后,您将收到以下输出 -
<img src="/public/core/edit/php/../attached/20231217142144_87634.jpg" alt="" border="0" />
<strong>第7步</strong> - 将以下代码复制到 <strong>app / http / abccontroller.php</strong> 文件。
<strong>应用程序/ http / abccontroller.php</strong>
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 " abc controller."; } }<strong>第8步</strong> - 在 <strong>app / http / routes.php</strong> 文件中添加以下代码行。
<strong>应用程序/ http / routes.php文件</strong>
route::get('terminate',[ 'middleware' => 'terminate', 'uses' => 'abccontroller@index', ]);<strong>第9步</strong> - 访问以下url以测试可终止的中间件。
http://localhost:8000/terminate<strong>第10步</strong> - 输出将显示如下图所示。
<img src="/public/core/edit/php/../attached/20231217142226_55307.jpg" alt="" border="0" />
<h3><a href="/s7900103/laravel 命名空间.html">下一节:laravel 命名空间</a></h3> <h3><a href="/php/php_sz/180.html">laravel 教程</a></h3>