Laravel中的路由基础

8408次阅读 663人点赞 作者: WuBin 发布时间: 2021-06-09 16:35:36
扫码到手机查看

路由简介

简单来说:将用户的请求转发给相应的程序(控制器)进行处理。

作用:建立url和程序、视图之间的映射关系。

请求类型:get /post/put/patch/delete

基础路由

以下案例均通过本地地址 http:localhost/laravel/public/ ---- 进行访问

本例以5.2版本为例,路由文件位于app/Http/routes.php文件,最新的laravel8路由文件位于route/web.php文件中。

get路由

Route::get('basic1', function () {
    return 'hello world';
});

访问:public/basic1 即可看到页面上显示出 hello world字样。

post路由

// 不能通过浏览器直接访问
Route::post('basic2', function () {
    return 'basic2';
});

match多请求路由

match只能响应已经设置的请求。

Route::match(['get', 'post'], 'multy1', function () {
    return 'multy1';
});
多请求路由 Route::match([想要的请求,多个逗号分开],‘路由的名字’, 执行的函数) match是指定想要的请求类型。

设置多请求路由后,public/multy1可以支持get请求和post请求都可以访问这个地址。

any多请求路由

any可以响应所有类型的请求。

Route::any('multy2', function () {
    return 'multy2';
});
Route::any('路由的名字', 执行的函数)

直接访问public/multy2 也可以看到浏览器显示了multy2。执行的是get请求。

路由参数

简单的get传参

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

浏览器访问public/user/1,浏览器就可以看到输出:user-id-1

传递的参数可选

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

这时,浏览器输入/public/user/abc,浏览器就会输出:user-name-abc

$name =null是默认值,如果,修改默认值,访问的时候没有传递参数部分,那么就会显示默认值。

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

浏览器输入/public/user,浏览器就会输出:user-name-sy

注意:如果浏览器访问的是/public/user/注意末尾红色斜线“/”,多了这个斜线,就会出现访问报错的提示。

传递的参数使用正则表达式进行限制

Route::get('user/{name?}', function ($name = 'sean') {
    return 'user-name-' . $name;
})->where('name', '[A-Za-z]+');

以上是对name参数值的类型进行限制,如果不是字母,那么就会抛出一个错误。

访问:public/user/12 会抛出一个错误;public/user/abc 会正确输出:user-name-abc。

语法:Route::get()->where('想要验证的字段', '正则表达式'),如果不符合验证规则就会报错

多个字段的参数验证

多个字段的验证, 直接将要验证的字段和正则规则放到一个数组中。如下:

Route::get('user/{id}/{name?}', function ($id, $name = 'sean') {
    return 'user-id-' . $id . '-name-' . $name;
})->where([
    'id' => '[0-9]+',
    'name' => '[A-Za-z]+'
]);

以上是分别对id参数和name参数分别制定正则验证的规则。只有传递的参数与类型相符才会正常输出。否则会抛出错误。

路由别名

定义:在设定路由时,可以给该路由设置一个“别名alias”,主要作用就是当我们修改路由的指向时,可以不用修改视图模板中使用route()函数生成别名对应的url。

语法:Route::get('路由名称', ['as' => '别名的名称', 执行的函数])
Route::get('user/member-center', ['as' => 'center', function () {
    // 返回别名对应的url,为了方便如果美化了url,那么对应模板中的链接是通过别名获得的,那么就无需更改
    return route('center');
}]);

这时候访问:public/user/member-center, 浏览器会输出:http://localhost/laravel/public/user/member-center,其中起主要作用的就是 route('center') route('路由别名的名称')。他会输出对应路由的url地址。当我修改路由地址:

Route::get('user/member-mid', ['as' => 'center', function () {
    return route('center');
}]);

当我访问public/user/member-mid的时候,浏览器会输出:http://localhost/laravel/public/user/member-mid

路由群组

有时候路由会有更多需求,如url区段等,使用路由群组套用到多个路由,而不用每个路由都要进行设置。如:

语法:group(['prefix' => '路由前缀名称',执行的函数])

我们要实现这样一个功能:给群组内的路由都加一个前缀,如访问/public/member/user/center,在群组内每个路由前面需要加一个前缀/member才能访问到,如:public/member/user/center

Route::group(['prefix' => 'member'], function () {

    Route::get('user/center', ['as' => 'center', function () {
        return route('center');
    }]);

    Route::any('multy2', function () {
        return 'member-multy2';
    });

});

如此,要访问user/center路由,需要通过地址:public/member/user/center才可以访问到,得到输出:http://localhost/laravel/public/member/user/center;同样的,要访问multy2路由,需要访问/member/multy2才可以。

注意:将multy2加入到member群组后,这个multy2与2.4中的multy2就是不同的路由了。

路由中输出视图

在resources/views中定义视图文件。

Route::get('view', function () {
    return view('welcome');
});

然后使用view方法渲染视图文件。

注意:路由只是用来接收请求,然后转化给控制器的方法进行处理,很少会在路由中直接输出视图。

相关资料

点赞 支持一下 觉得不错?客官您就稍微鼓励一下吧!
关键词:laravel路由,Route
推荐阅读
  • uniapp实现被浏览器唤起的功能

    当用户打开h5链接时候,点击打开app若用户在已经安装过app的情况下直接打开app,若未安装过跳到应用市场下载安装这个功能在实现上主要分为两种场景,从普通浏览器唤醒以及从微信唤醒。

    8186次阅读 521人点赞 发布时间: 2022-12-14 16:34:53 立即查看
  • Vue

    盘点Vue2和Vue3的10种组件通信方式

    Vue中组件通信方式有很多,其中Vue2和Vue3实现起来也会有很多差异;本文将通过选项式API组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式。

    3282次阅读 241人点赞 发布时间: 2022-08-19 09:40:16 立即查看
  • JS

    几个高级前端常用的API

    推荐4个前端开发中常用的高端API,分别是MutationObserver、IntersectionObserver、getComputedstyle、getBoundingClientRect、requ...

    13228次阅读 854人点赞 发布时间: 2021-11-11 09:39:54 立即查看
  • PHP

    【正则】一些常用的正则表达式总结

    在日常开发中,正则表达式是非常有用的,正则表达式在每个语言中都是可以使用的,他就跟JSON一样,是通用的。了解一些常用的正则表达式,能大大提高你的工作效率。

    12104次阅读 385人点赞 发布时间: 2021-10-09 15:58:58 立即查看
  • 【中文】免费可商用字体下载与考证

    65款免费、可商用、无任何限制中文字体打包下载,这些字体都是经过长期验证,经得住市场考验的,让您规避被无良厂商起诉的风险。

    10347次阅读 829人点赞 发布时间: 2021-07-05 15:28:45 立即查看
  • Vue

    Vue3开发一个v-loading的自定义指令

    在vue3中实现一个自定义的指令,有助于我们简化开发,简化复用,通过一个指令的调用即可实现一些可高度复用的交互。

    14248次阅读 1132人点赞 发布时间: 2021-07-02 15:58:35 立即查看
  • JS

    关于手机上滚动穿透问题的解决

    当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动;然而事实并非如此。在PC上使用css即可解决,但是在手机端,情况就变的比较复杂,就需要禁止触摸事件才可以。

    14180次阅读 1156人点赞 发布时间: 2021-05-31 09:25:50 立即查看
  • Vue

    Vue+html2canvas截图空白的问题

    在使用vue做信网单页专题时,有海报生成的功能,这里推荐2个插件:一个是html2canvas,构造好DOM然后转canvas进行截图;另外使用vue-canvas-poster(这个截止到2021年3月...

    27073次阅读 2131人点赞 发布时间: 2021-03-02 09:04:51 立即查看
  • Vue

    vue-router4过度动画无效解决方案

    在初次使用vue3+vue-router4时候,先后遇到了过度动画transition进入和退出分别无效的情况,搜遍百度没没找到合适解决方法,包括vue-route4有一些API都进行了变化,以前的一些操...

    23237次阅读 1791人点赞 发布时间: 2021-02-23 13:37:20 立即查看
交流 收藏 目录