Laravel5.1 框架路由基础详解


Posted in PHP onJanuary 04, 2020

本文实例讲述了Laravel5.1 框架路由基础。分享给大家供大家参考,具体如下:

什么是路由?

大K简单的说下,路由是用户访问我们程序的一个入口,比方说 你在浏览器输入:www.myblogs.com/create 就会打开一个页面,我们接收到这一个请求后后台需要做一些事儿来反馈给用户一些东西。

1 路由的实例

首先呢laravel的路由定义在这个路径下:app/Http/routes.php

/**
 * 这是Laravel提供给我们的主界面路由,输入 localhost:8000(如果你用的artisan控制台)就可以看到主界面啦
 */
Route::get('/', function () {
  return view('welcome');
});
/**
 * 我们自己定义了get路由
 * 浏览器输入 localhost:8000/get 就可以看到啦。
 */
Route::get('/get', function (){
  return '这是我们自己定义的get路由';
});
/**
 * 我们自己定义了post路由
 */
Route::get('/post', function (){
  return '这是我们自己定义的post路由';
});

备注:路由方法不只有 get和post 还有put啊 delete啊等,具体可以根据实际情况使用。

2 匹配多种路由

/**
 * 使用match可以匹配多种方法到一个路径下, localhost:8000/hello 支持GET方法也支持POST方法。
 */
Route::match(['get', 'post'], '/hello', function (){
  return 'hi~ 我是大K';
});
/**
 * any 顾名思义 它可以匹配所有的方法。
 */
Route::any('/any', function (){
  return 'any能匹配所有的方法';
});

3 路由参数

咱在写项目的时候啊 经常需要从路由中捕获参数以便之后的处理,那如何声明呢,继续看:

3.1 必选参数

/**
 * 参数的写法简单 加个花括号就行,然后在后面的闭包中捕获它就行。
 */
Route::get('/user/{id}', function ($id){
  return '咱成功的拿到了一个用户ID:' . $id;
});

3.2 可选参数

/**
 * 可选参数只要在参数名后面跟个问号就好,然后在闭包中给它个默认值就好。
 */
Route::get('/user/{id}/name/{name?}/descriptions/{description?}', function ($user_id, $user_name = 'K', $user_description = null){
  return '咱捕获了一堆参数 其中必选参数:'.$user_id.'可选的两个参数 名字:'.$user_name.'简介:'.$user_description;
});

3.3 使用正则约束参数

大K呢在上面两个例子中写的不太严谨,就那第一个例子说吧,一般id都是正整数的,可是第一个例子里咱输入一串鸟文它也能识别到,咱应该加串儿正则让它变得挑食点儿:

/**
 * 参数的写法简单 加个花括号就行,然后在后面的闭包中捕获它就行。
 * 后面跟了个where方法,里面限制了id参数必须是数字。
 */
Route::get('/user/{id}', function ($id){
  return '咱成功的拿到了一个用户ID(现在我只能接受数字):' . $id;
})->where('id','[0-9]+');
/**
 * 如果对多个参数进行约束,那咱就得在where方法中给数组啦。
 */
Route::get('/user/{id}/name/{name?}', function ($id, $name = 'k'){
  return '咱成功的拿到了一个用户ID(现在我只能接受数字):' . $id . '名字:' . $name;
})->where(['id' => '[0-9]+','name' => '[a-zA-Z]+']);

3.4 全局约束(小拓展)

在实际开发中啊,一般参数为ID的一般都是整数,如果咱每个路由后面都跟个where是不是倍儿烦躁?甭担心,有一步到位的方法:在app/Providers/RouteServiceProvider.php 文件中boot方法,添加一段代码就行:

public function boot(Router $router)
{
  $router->pattern('id', '[0-9]+');
  parent::boot($router);
}

然后修改一下刚刚的例子:

Route::get('/user/{id}', function ($id){
  return '咱成功的拿到了一个用户ID(现在我只能接受数字):' . $id;
});
Route::get('/user/{id}/name/{name?}', function ($id, $name = 'k'){
  return '咱成功的拿到了一个用户ID(现在我只能接受数字):' . $id . '名字:' . $name;
})->where('name','[A-Za-z]+');

4 给路由起名字

为啥要给路由起名字?咱想一下这么一个场景啊 : 进到某一个路由后 我们需要在数据库中更新一条信息,当信息更新完了后要跳转到另外一条路由,这条路由的路径是:localhost:8000/xxxx/sdfsa/xasfes/xaefsggd/xaeqwes/xadfase(当然啦 我是乱敲的) 难道我们要手动打xxxx/sdfsa/xa...么?或者你可以说 copy一下,但是我们给这条路由起一个名字,直接使用名字来跳转 岂不美哉?

/**
 * 现在比如说 用户在更新他的名字 拿到名字后在数据库中更新 更新完了跳转到另一个路由
 */
Route::get('/user/{id}/name/{name}', function ($id, $name){
  // 更新数据库操作
  // ...
  // 跳转
  return redirect()->route('showUser',['name' => $name]);
})->where('name','[A-Za-z]+');
/**
 * 另一条路由 (路径瞎写的啊)
 * 在路径后面加一个数组 as=>router_name 就是这么个流程。
 */
Route::get('/admin/private/user/show/{name}', ['as' => 'showUser', function($name){
  return '哇 你的名字已经更新完啦:'.$name;
}]);

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
初探PHP5
Oct 09 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
php开发文档 会员收费1期
Aug 14 PHP
PHP实现读取一个1G的文件大小
Aug 24 PHP
php实现图片缩放功能类
Dec 18 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 #PHP
PHP+MySQL实现在线测试答题实例
Jan 02 #PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 #PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 #PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 #PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 #PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 #PHP
You might like
比较时间段一与时间段二是否有交集的php函数
2011/05/31 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
PHP中session变量的销毁
2014/02/27 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
vue实现微信获取用户信息的方法
2019/03/21 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
python3 与python2 异常处理的区别与联系
2016/06/19 Python
浅析Python四种数据类型
2018/09/26 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
pandas数据处理进阶详解
2019/10/11 Python
基于Python实现扑克牌面试题
2019/12/11 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
出国考察邀请函
2014/01/21 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书