Laravel学习笔记基础系列--(四)Laravel路由的基础使用

作者: 温新

分类: 【Laravel】

阅读: 1728

时间: 2021-06-30 16:42:46

作者:温新

时间: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方法外,还有postputdeletematchanyoptionsfallback

其它路由简单的使用

这些路由中只记录matchany路由的使用,其他路由作简单说明,不作演示。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

路由是固定的,短期内没有多大变化,使用路由缓存能够有效降低开销。如路由缓存之后,第二次请求同一个路由时不会去重新注册,而是从路由缓存中读取。

我是温新

每天进步一点点,就一点点

请登录后再评论