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 相关文章推荐
最省空间的计数器
Oct 09 PHP
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
php学习笔记(三)操作符与控制结构
Aug 06 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 PHP
php实现只保留mysql中最新1000条记录
Jun 18 PHP
详解WordPress中简码格式标签编写的基本方法
Dec 22 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
PHP如何将XML转成数组
Apr 04 PHP
Yii2如何批量添加数据
May 17 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
Oct 25 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入门速成(2)
2006/10/09 PHP
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
js数组的基本使用总结
2021/01/18 Javascript
python实现获取Ip归属地等信息
2016/08/27 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
大学生饮食配送创业计划书
2014/01/04 职场文书
行政求职信
2014/07/04 职场文书
导师对论文的学术评语
2015/01/04 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
详解vue中v-for的key唯一性
2021/05/15 Vue.js
Python 发送SMTP邮件的简单教程
2021/06/24 Python
Python自动化实战之接口请求的实现
2022/05/30 Python