Laravel框架对于中间件{参数}的深入运用以及请求参数的实战
Larravel
Larravel Breeze为构建Larravel应用程序提供了一个简单且最小化的起点,而Jetstream通过更强大的功能和额外的前端技术堆栈增强了应用程序功能。对于刚接触Lavel的人,我们建议在学习Lavel Jetstream之前先学习Lavel Breeze。
Jetstream为Lavel提供了设计精美的应用程序脚手架代码,包括登录、注册、邮箱验证、双重身份验证、会话管理、基于Lavel Sanctum的API支持以及可选的团队管理功能。Jetstream使用Tailwind CSS设计样式,并提供Livewire或Inertia Js驱动的前端脚手架技术堆栈供选择。
中间件:
所见,如果请求参数中的age小于或等于200,中间件将向客户端返回HTTP重定向;否则,请求将被传递。可以通过调用回调函数request来传递请求。
注意:此时,只定义了中间件的逻辑。为了使中间件有效,需要在指定的路由中注册它。我们很快将在下面的注册中间件部分中教如何做到这一点。
理解中间件的最佳方法是将其视为HTTP请求在到达目标操作之前必须经过的“层”。每一层将检查请求,并可以完全拒绝它。
注意:所有中间体都在服务容器中解析,因此可以在中间件的构造函数中提示任何依赖项。
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 200) {
return redirect('/');
}
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
// Perform action
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}
将中间件分配给指定的路由,如果要将中间件分配给指定的路由,应首先在app/Http/Kernel中设置。默认情况下,此类的$routeMiddleware属性包含Larravel提供的中间件。要添加自己的中间件,只需将其附加到以下内容并为其分配一个密钥。
Route::get('/hello', function () {
//
})->middleware('age', 'auth');
有时可能希望通过指定密钥名称将相关中间件分配给同一组,以便更容易地将其分配给路由。这可以通过使用HTTP内核提供的$middlewareGroups属性来实现。
Larravel提供了两个开箱即用的中间件组:web和api,它们分别包含可应用于web和api路由的通用中间件:
protected $middlewareGroups = [
'web' => [
\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,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'auth:api',
],
];
中间件参数
终端中间件可以理解为后端处理中间件。有时,在HTTP响应发送到浏览器后,中间件可能需要做一些工作。例如,Larave中内置的会话中间件将在响应发送到浏览器后将会话数据写入内存。要实现此功能,您需要定义一个终止中间件,并向中间件添加一个终止方法
终止方法将接收请求和响应作为参数。在定义了终端中间件之后,需要将其添加到app/Http/Kernel PHP文件中。
在中间件上调用terminate方法时,Larravel将从服务容器中获取中间件的新实例。如果要在调用handle和terminate方法时使用相同的中间件实例,则需要使用容器提供的singleton方法以单个实例的方式将中间件注册到容器中。通常,这需要在AppServiceProvider PHP注册方法中完成:
<?php
namespace Illuminate\Session\Middleware;
use Closure;
class StartSession
{
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate($request, $response)
{
// 存储session数据...
}
}
use App\Http\Middleware\TerminableMiddleware;
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->singleton(TerminableMiddleware::class);
}
在HTTP内核中定义中间件后,可以使用中间件方法将其分配给路由
- 点赞
- 收藏
- 关注作者
评论(0)