laravel5.8(五)基本路由配置

简介: 在使用laravel之前我一直在使用thinkphp还有yii框架,这两个框架也有路由这一说,但是都没有用过。Laravel的路由功能其实还是挺全的,也很优雅~下面来说正题:1:路由的基本介绍Laravel框架默认为我们提供了两个路由文件,在根目录下的routes目录下有web.php以及api.php。这些文件通过框架自动加载,相应逻辑位于 app/Providers/RouteServiceProvider 类。routes/web.php 文件定义了 Web 界面的路由,这些路由被分配到了 web 中间件组,从而可以使用 Session 和 CSRF 保护等功能。routes/a

在使用laravel之前我一直在使用thinkphp还有yii框架,这两个框架也有路由这一说,但是都没有用过。

Laravel的路由功能其实还是挺全的,也很优雅~

下面来说正题:

1:路由的基本介绍

Laravel框架默认为我们提供了两个路由文件,在根目录下的routes目录下有web.php以及api.php。这些文件通过框架自动加载,相应逻辑位于 app/Providers/RouteServiceProvider 类。routes/web.php 文件定义了 Web 界面的路由,这些路由被分配到了 web 中间件组,从而可以使用 Session 和 CSRF 保护等功能。routes/api.php 中的路由是无状态的,这是因为被分配到了 api 中间件组。

一般情况下,我们都会使用web.php来开始定义路由。定义在 routes/web.php 中的路由可以通过在浏览器地址栏输入相应的 URL 进行访问,例如,你可以通过 blog.test/user 访问下面的路由:

php

复制代码

Route::get('/user', 'UsersController@index');

正如前面所提到的,定义在 routes/api.php 文件中的路由通过 app/Providers/RouteServiceProvider 的处理被嵌套在一个路由群组中, 在这个群组中,所有路由会被自动添加 /api 前缀,所以你不需要再到路由文件中为每个路由手动添加,你可以通过编辑 RouteServiceProvider 类来修改路由前缀以及其他的路由群组选项:

php

复制代码

/**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapApiRoutes()
    {
        Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));
    }

2:有效的路由方法

我们可以注册路由来响应任何 HTTP 请求动作:

php

复制代码

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

3:路由重定向

如果你需要定义一个重定向到其他 URI 的路由,可以使用 Route::redirect 方法,该方法非常方便,以至于你不需要再定义额外的路由或控制器来执行简单的重定向逻辑:

php

复制代码

Route::redirect('/here', '/there');

其中 here 表示原路由,there 表示重定向之后的路由。默认情况下,Route::redirect 返回 302 状态码,你可以使用可选的第三个参数来自定义这个状态码:

php

复制代码

Route::redirect('/here', '/there', 301);

你还可以使用 Route::permanentRedirect 方法来返回 301 状态码:

php

复制代码

Route::permanentRedirect('/here', '/there');

4:路由参数

(1):必选参数

单个参数

php

复制代码

Route::get('user/{id}', function ($id) {
    return 'User ' . $id;
});

多个参数

php

复制代码

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    return $postId . '-' . $commentId;
});

(2):可选参数

php

复制代码

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

5:路由分组

(1):中间件路由分组

要给某个路由分组中定义的所有路由分配中间件,可以在定义分组之前使用 middleware 方法。中间件将会按照数组中定义的顺序依次执行:

php

复制代码

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        // Uses first & second Middleware
    });
    Route::get('user/profile', function () {
        // Uses first & second Middleware
    });
});

(2):路由前缀

prefix 方法可以用来为分组中每个路由添加一个给定 URI 前缀,例如,你可以为分组中所有路由 URI 添加 admin 前缀 :

php

复制代码

Route::prefix('admin')->group(function () {
    Route::get('users', function () {
        // Matches The "/admin/users" URL
    });
});

6:兜底路由

使用 Route::fallback 方法可以定义一个当所有其他路由都未能匹配请求 URL 时所执行的路由。通常,未处理请求会通过 Laravel 的异常处理器自动渲染一个「404」页面,不过,如果你在 routes/web.php 文件中定义了 fallback 路由的话,所有 web 中间件组中的路由都会应用此路由作为兜底,当然,如果需要的话,你还可以添加额外的中间件到此路由:

php

复制代码

Route::fallback(function () {
    //
});

7:频率限制

Laravel 自带了一个中间件用于限制对应用路由的访问频率。开始使用该功能之前,分配 throttle 中间件到某个路由或路由分组,throttle 中间件接收两个参数用于判断给定时间内(单位:分钟)的最大请求次数。例如,我们指定登录用户每分钟只能访问下面的分组路由 60 次:

php

复制代码

Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

超出访问次数后,会返回 429 状态码并提示「Too many requests」。

动态频率限制

此外,还可以基于 User 模型的属性来动态设置最大请求次数。例如,如果 User 模型包含 rate_limit 属性,就可以将其这个属性名传递到 throttle 中间件,这样就可以将属性值作为计算最大请求次数的数据来源:

php

复制代码

Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

8:获取当前访问路由属性

你可以使用 Route 门面上的 current、currentRouteName 和 currentRouteAction 方法来访问处理当前输入请求的路由信息:

php

复制代码

// 获取当前路由实例
$route = Route::current();
// 获取当前路由名称
$name = Route::currentRouteName();
// 获取当前路由action属性
$action = Route::currentRouteAction();

以上大概就是路由的基本知识,有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”

目录
相关文章
【vue2项目总结】——路由配置
【vue2项目总结】——路由配置
125 0
|
11月前
|
小程序
laravel8(二)配置自定义路由文件
关于laravel5添加自定义路由文件,请移步《laravel5.8(十五)新增自定义路由文件》 这里大概记录一下laravel8添加自定义路由文件的过程: 持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情 1:首先在routes目录下创建你要添加的自定义路由文件 我这里直接复制的web.php。 2:修改app/Providers目录下RouteServiceProvider.php文件 我这里也是直接复制web部分的代码改的名字 3:修改app/Http目录下Kernel.php文件 我这里还是直接复制web部分的代码改的名
84 1
|
11月前
|
JavaScript
Vue 最简单路由 页面路由 配置路由
Vue 最简单路由 页面路由 配置路由
|
JavaScript 网络架构
vue3动态路由配置
动态路由是指在运行时根据某些条件创建或修改路由。这对于需要动态生成路由的应用程序非常有用,例如基于用户权限的路由控制。
188 1
|
存储 前端开发 JavaScript
[Vue]路由及路由的基本使用
[Vue]路由及路由的基本使用
|
JavaScript
vue 项目路由配置
vue 项目路由配置
92 0
|
JavaScript
Nodejs路由
nodejs零碎知识记录
93 0
Nodejs路由
|
JavaScript 开发者 CDN
路由-安装 vue-router 的两种方式|学习笔记
快速学习路由-安装 vue-router 的两种方式
173 0
|
JavaScript 开发者 CDN
路由-安装vue-router的两种方式|学习笔记
快速学习路由-安装vue-router的两种方式
141 0
|
PHP
【laravel】@4 路由
【laravel】@4 路由
109 0
【laravel】@4 路由