laravel学习笔记--路由组与中间件

66 篇文章 4 订阅

路由组

路由组允许你在大量路由之间共享路由属性,例如中间件或命名空间,而不需要为每个路由单独定义这些属性。共享属性应该以数组的形式传入
Route::group 方法的第一个参数中

路由组就是说,在定义的路由组里面定义的路由只能被相应的域名访问
如下面这个路由组,domain路由只能被blog.cn域名访问
。如blog.com是不能访问的

定义路由组

Route::domain('blog.cn')->group(function () {
//里面是可访问的路由
    Route::get('domain', function () {
        dd('子域名路由');
    });
});

路由前缀
prefix 方法将会为路由组中的每一个 URI 添加前缀
如每个路由前缀都为admin的路由就可以这样写

Route::prefix('admin')->group(function () {
    //路由1
    Route::get('users', function () {
        dd('路由组前缀的users');
    });
    //路由2
    Route::get('artice', function () {
        dd('路由组前缀的artice');
    });
});

路由名称前缀

name 方法可以为路由组中每一个路由名称添加一个指定的字符串作为前缀。例如,您可以给已经分组的路径添加 admin
的前缀。给定的字符串与指定的路由名称前缀完全相同,因此我们将确保在前缀中提供尾部的 . 字符

由于name方法已经为路由前缀添加了前缀,所以,在使用的时候就可以直接使用路由进行访问,而不需要加前缀
如下面的路由,http://blog.com/orders就可以直接访问,不需要前缀

Route::name('admin.')->group(function () {
    Route::get('orders', function () {
        dd('路由名称前缀:admin.orders');
    })->name('orders');
});

中间件

中间件提供了一种方便的机制过滤进入应用程序的 HTTP 请求。例如,Laravel 包含一个验证用户身份的中间件。
如果用户未能通过认证,中间件会把用户重定向到登录页面。 反之,用户如果通过验证, 中间件将把请求进一步转发到应用程序中

Laravel 自带了一些中间件,包括身份验证、CSRF 保护等。所有的这些中间件都位于 app/Http/Middleware 目录

定义中间件

创建中间件会生成到app/Http/Middleware

php artisan make:middleware CheckAge

前置 & 后置 中间件

中间件是在请求之前或之后执行,取决于中间件本身。例如, 下面的中间件将在应用处理请求之前执行一些任务

应用请求之前–前置中间件BeforeMiddleware

class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // Perform action

        return $next($request);
    }
}

应用请求之后–后置中间件AfterMiddleware

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}

注册中间件

如果希望中间件生效,那么就需要去注册中间件,中间件都在app\Http\Kernel.php中去注册,

app\Http\Kernel.php里面有全局中间件,路由组中间件,路由中间件

  1. protected $middleware = []是全局中间件
  2. 这个是路由组中间件,里面又有web中间件和API中间件 protected $middlewareGroups = [
    ‘web’ => [],
    ‘api’=>[]
    ]
  3. 这个是路由中间件 protected $routeMiddleware = []

比如,在路由中间件中去注册一个中间件

protected $routeMiddleware = [
	        'check.age'=>\App\Http\Middleware\CheckAge::class,
]

完整使用一个中间件的流程
路由组使用中间件
1.定义一个中间件
有一中间件

public function handle(Request $request, Closure $next)
    {
        if ($request->age <= 200) {
            return redirect('/');
        }
        return $next($request);
    }

2.然后去注册中间件

protected $routeMiddleware = [
	        'check.age'=>\App\Http\Middleware\CheckAge::class,
]

3.去定义一个使用中间件的路由组

Route::middleware('check.age')->group(function () {
    Route::get('m', function () {
       dd('年龄符号!'); 
    });
});

如果这个路由不传参数就直接访问,会直接跳转到首页,如:

https://blog.cn/m

如果访问的时候,加上参数,而且参数符合,就通过中间件验证

blog.cn/m?age=201

如果是路由要使用中间件可以这样

Route::get('n', function () {
    dd('年龄符合!');
})->middleware('check.age');

如果是多个中间件,这样使用

Route::get('n', function () {
    dd('年龄符合!');
})->middleware('check.age','check.num');

当然,也可以使用数组的方式

中间件参数

中间件还可以接收额外的参数。例如,如果你的应用程序需要在执行给定操作之前验证用户是否为给定的「角色」, 你可以创建一个 CheckRole
中间件,由它来接收「角色」名称作为附加参数

附加的中间参数会在 $next 参数之后传递给中间件

如有一个中间件定义了需要接收参数

public function handle(Request $request, Closure $next,$name)
    {
        dd($name);
        if ($request->age <= 200) {
            return redirect('/');
        }
        return $next($request);
    }

定义路由时通过一个 : 来隔开中间件名称和参数来指定中间件参数。多个参数就使用逗号分隔

Route::get('n', function () {
    dd('年龄符合!');
})->middleware('check.age:xiaoxin');
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小信啊啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值