Laravel框架对于中间件{参数}的深入运用以及请求参数的实战

举报
江南清风起 发表于 2024/08/14 22:04:42 2024/08/14
【摘要】 LarravelLarravel Breeze为构建Larravel应用程序提供了一个简单且最小化的起点,而Jetstream通过更强大的功能和额外的前端技术堆栈增强了应用程序功能。对于刚接触Lavel的人,我们建议在学习Lavel Jetstream之前先学习Lavel Breeze。Jetstream为Lavel提供了设计精美的应用程序脚手架代码,包括登录、注册、邮箱验证、双重身份验证...

Larravel

Larravel Breeze为构建Larravel应用程序提供了一个简单且最小化的起点,而Jetstream通过更强大的功能和额外的前端技术堆栈增强了应用程序功能。对于刚接触Lavel的人,我们建议在学习Lavel Jetstream之前先学习Lavel Breeze。
Jetstream为Lavel提供了设计精美的应用程序脚手架代码,包括登录、注册、邮箱验证、双重身份验证、会话管理、基于Lavel Sanctum的API支持以及可选的团队管理功能。Jetstream使用Tailwind CSS设计样式,并提供Livewire或Inertia Js驱动的前端脚手架技术堆栈供选择。

中间件:

所见,如果请求参数中的age小于或等于200,中间件将向客户端返回HTTP重定向;否则,请求将被传递。可以通过调用回调函数next并传递当前的next并传递当前的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内核中定义中间件后,可以使用中间件方法将其分配给路由

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。