Laravel学习笔记基础系列--(四)Laravel路由的基础使用
作者:温新
时间:2021-06-24
对于Web开发,URL是不可避免的。在Laravel中,我们喊她为路由。开发从路由开始,有了路由,我们才能在浏览器中看到我们的艺术。
一切从路由开始。我们Web开发所需要定义的路由位于routes/web.php
。
后续的路由均在写在routes/web.php
,没有特殊情况不作说明。
路由初体验
Route::get('hello', function(){
return 'hello Laravel!';
});
浏览器访问http://你的主机域名.com/index.php/hello
就可以看到结果的输出。
通过简单的案例的体验,可以看到定义路由时使用了get
方法,除了get方法外,还有post
、put
、delete
、match
、any
、options
、fallback
。
其它路由简单的使用
这些路由中只记录match
与any
路由的使用,其他路由作简单说明,不作演示。put
一般用于更新的请求,delete
一般用于删除的请求。
match路由
match
用法:Route::match([],'url',$callback)
如果一个路由既然对应get
请求又要对应post
请求,那么就可以通过match
方法实现。如实际开发情况中,添加数据的表单界面的url(get请求)与接收数据的url(post)是同一个的情况下,math就可以使用。实际开发中,仍旧有些人是这样做的。就我个人而言,不推荐使用。
下而来看看实际案例:
Route::match(['get','post'], 'm', function(){
return '使用get或post请求';
});
post请求请使用postman进行测试。不过呢,post请求时会报419错误,这是因为csrf验证导致的,不用担心,后续会介绍到。这里主要了解match可以使用多个不同的请求即可。
any路由
Route::any('an', function(){
return '任何请求我都可以接受';
});
关于any,它可以接收一个任何请求,如get、post、delete等它都可以接收。
路由参数
大多数路由都是有参数的,而传递参数是在开发中用最的很多的。Laravel可接收两种参数:必选参数与可能参数。下面分别介绍。
必选参数
简而言之,就是必须传递的参数。若没有传,则会报错。
单个必选参数
必选参数用法:Route::get('url/{参数}', $callback)
Route::get('user/{id}', function($id){
return '我有一个必选参数,你必须传递给我,不然我不跟你玩了~';
});
注意:若没有传递参数,即使给了默认值(如:$id=10)同样会报错。
多个必选参数
Route::get('art/{aid}/comments/{cid}', function($aid, $cid){
return '我必须要有' . $aid . '和' . $cid . '才能和你愉快玩耍~';
});
可选参数
简而言之,就是可传可不传的参数,若不传,则必须给定一个默认值,不然会报错。
可选参数用法:Route::get('url/{参数?}', $callback)
Route::get('user1/{name?}', function($user = '自如初'){
return 'hi,我是 '. $user . ' 你不传我也可以和玩耍~';
});
关于多个参数,使用方法都是一样的,这里不演示了。
正则约束路由参数
用法:Route::get('url/{参数}', $callback)->where('参数','约束条件')
。若是多个条件则使用数组形式:>where(['id' => '[0-9]+', 'username' => '[a-z]+']);
单个路由约束
如使用ID获取每一篇文章,正常的情况下没有使用非数字参数来获取文章,为了保证使用ID来获取文章,就可以对ID就行数字约束。
Route::get('num/{id}', function ($id) {
// $id 必须是数字
return '你传的参数是数字 ' . $id . ' 我可以和你玩耍';
})->where('id', '[0-9]+');
全局约束
全局约束,就是对所有路由有效。全局约束需要在RouteServiceProvider
类中的boot
方法进行定义。
无论哪一个路由,只要包含符合全局约束的参数都会生效,如下定义两个路由,都有ID参数,而我们对ID进行了全局约束,因此不用在第个路由后面进行单独约束。
第一步:先定义定义路由
// web.php
Route::get('user/{id}', function($id){
return '全局对id约束';
});
Route::get('post/{id}', function($id){
return '全局对id约束';
});
第二步:全局约束
//app/Providers/RouteServiceProvider.php
public function boot()
{
// 全局约束路由参数ID为数字
Route::pattern('id', '[0-9]+');
}
路由缓存
注册路由缓存
php artisan route:cache
清除路由缓存
php artisan route:clear
路由是固定的,短期内没有多大变化,使用路由缓存能够有效降低开销。如路由缓存之后,第二次请求同一个路由时不会去重新注册,而是从路由缓存中读取。
我是温新
每天进步一点点,就一点点