# 3分钟短文:Laravel路由注册,你必须掌握的“动词”!
引言
无论是web页面还是API接口,我们都绕不开的是路由地址,网络资源定位也只能依赖于路由地址,它是衔接网络请求与应用程序的桥梁。
本期为大家说一说用laravel注册路由的那些必知必会的方法。
代码时间
遵循编程惯例,首先实现一个 hello world 的示例。在路由文件 routes/web.php 内注册一个get请求的路径:
// routes/web.php
Route::get('/', function () {
return 'Hello, World!';
});
web服务器配置正确后,我们就可以通过 http://www.example.com/ 这个路由地址直达该路由。因为路由内传入了一个闭包,那么匿名函数的返回值,就会直接返回给 response,并显示到页面上。
大家注意,get这个静态方法,是一个动词,声明了该请求的方式是 GET 请求。同样地,我们可以注册更多的类似路由,在路由文件内注册更多的地址:
Route::get('/', function () {
return view('welcome');
});
Route::get('about', function () {
return view('about');
});
Route::get('products', function () {
return view('products');
});
Route::get('services', function () {
return view('services');
});
上面的4个路由与 hello world 路由不同,我们做了修改,在闭包内返回了一个 view() 方法创建的视图。这4条路由都是GET方式,如果使用其他HTTP标准的请求方式,可以如下注册:
Route::post('/', function () {});
Route::put('/', function () {});
Route::delete('/', function () {});
Route::any('/', function () {});
Route::match(['get', 'post'], '/', function () {});
除了使用闭包返回数据,路由注册也可以指向控制器方法,比如这样:
Route::get('/', 'WelcomeController@index');
动态路由需要用户提供更多个输入参数,所以在规划路由上,可以使用占位符接收路由地址的数据,比如这样写:
Route::get('users/{id}/friends', function ($id) {
//
});
位置参数 id 在正确传入数值之后,就会传递到指定的方法内,在此例是 $id。传递多个位置参数也是毫无压力的:
Route::get('users/{userId}/comments/{commentId}', function ($thisIsActuallyTheUserId,$thisisReallyTheCommentId) {
//
});
我们路由内使用的位置变量,和闭包形参并不相同,这样也完全可以使用。但是并不推荐,前后保持一致性,有利于bug排查和调试,是最佳实践。
有些位置参数,可以填可以不填,并不是强制要求的。或者说,如果不传的话,给定一个默认值,经过数据处理后返回给用户也是可以的。那么可以声明该位置参数为可选参数,代码如下:
Route::get('users/{id?}', function ($id = 'fallbackId') {
//
});
不仅于此,你还可以直接在路由上对传入数据进行有效性判断,把无效的数据拦截到路由层。约束条件支持正则表达式,比如这样写:
Route::get('users/{id}', function ($id) {
//
})->where('id', '[0-9]+');
此处 where 方法接收参数,指定参数 id 必须符合指定的正则表达式,也就是纯数字。还可以指定为纯字母的正则:
Route::get('users/{username}', function ($username) {
//
})->where('username', '[A-Za-z]+');
要求 username 传入的参数只能是多个大小写字母的组合。如果路由内声明了多个位置参数,且都需要验证,那么在 where 方法内传入参数名 + 正则的数组即可:
Route::get('posts/{id}/{slug}', function ($id, $slug) {
//
})->where(['id' => '[0-9]+', 'slug' => '[A-Za-z]+']);
有了这样的条件约束方法,你完全可以利用正则的强大的功能,组装出更强劲的验证。
写在最后
本文初步介绍了laravel内注册一条路由的方法,简单地讲解了位置参数的传入和接收,以及在路由内添加正则表达式赋能的条件约束方式。都是基础而且使用的,大家一定要牢固掌握。
Happy coding :-)
我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者
- 数据库中间件 Sharding-JDBC 源码分析 —— 事务(一)之BED
- 熔断器 Hystrix 源码解析 —— 命令执行(二)之执行隔离策略
- phalapi-入门篇4(国际化高可用和自动生成文档)
- 用JavaScript动态输出的JS脚本不能执行
- Dubbo源码解析 —— 服务暴露原理
- [Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
- [喵咪大数据]Hive+Hbase关联
- 再战子域共享Cookie问题
- [喵咪大数据]Presto查询引擎
- 如何在5分钟内做出你的第一个开源贡献
- [喵咪大数据]HUE大数据管理工具
- Dubbo源码解析 —— Zookeeper 订阅
- 注册中心 Eureka 源码解析 —— 项目结构简介
- 【平台】Seldon.io发布新开源平台,用于Kubernetes上的机器学习
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 没想到吧!关于Dubbo的『消费端线程池模型』官网也写错了。
- Go内存管理之代码的逃逸分析
- MySQL读锁的区别和应用场景分析
- Apache NIFI 讲解(读完立即入门)
- 了解NiFi最大线程池和处理器并发任务设置
- 深入理解 Apache NIFI Connection
- 【Go语言探险】线上奇怪日志问题的排查
- 探索 Apache NIFI 集群的高可用
- 面试被问:Spring Boot中Tomcat是如何启动的?
- Spring Boot 实现定时任务的动态增删启停等管理!
- Apache NIFI ExecuteScript组件脚本使用教程
- Redis必会的性能监控指标汇总
- 带你体验Apache NIFI新建数据同步流程(NIFI入门)
- Spring JPA 存储库接口定义
- 如何给Apache开源项目贡献代码