【laravel】访问路由报错问题,执行 php artisan route:clear 删除路由缓存文件,以及DingoApi的路由写法

前言:

路由缓存:路由缓存不会作用于基于闭包的路由。要使用路由缓存,必须将闭包路由转化为控制器路由。

1、如果你的应用完全基于控制器路由,可以使用 Laravel 的路由缓存,使用路由缓存将会极大降低注册所有应用路由所花费的时间开销,在某些案例中,路由注册速度甚至能提高100倍!想要生成路由缓存,只需执行 Artisan 命令 :

php artisan route:cache

2、运行完成后,每次请求都会从缓存中读取路由,所以如果你添加了新的路由需要重新生成路由缓存。因此,只有在项目部署阶段才需要运行 route:cache 命令,本地开发环境完全无此必要,开发阶段直接删掉 bootstrap/cache/routes.php 文件即可。

想要移除缓存路由文件,使用 route:clear 命令即可:

php artisan route:clear

配置缓存:开发阶段没必要生成配置缓存文件,不然你每次更新.env文件都要执行:

php artisan config:cache

 

一、假如你使用了路由缓存文件,如果是laravel原生的路由一般重新加载配置和路由文件就能解决。

php artisan config:cache & php artisan route:cache

二、如果是使用Dingo等路由扩展包,第一次就容易出错

1、清理路由缓存,报错无果

php artisan api:cache
#执行后如果success 也会生成 bootstrap/cache/routes.php,这个命令将缓存你的 API 路由,和你主要应用的路由一起。当执行这个命令的时候会自动执行 route:cache 命令。所以执行完这个命令后就不要在执行 route:cache 了。

Unable to prepare route [/api/version] for serialization. Uses Closure

2、查看路由,没有显示,但其实我api.php写的有路由闭包

#查看路由
php artisan api:routes
Your application doesn't have any routes.

#解释:这个命令将生成你的 API 路由列表。这个命令的效果类似 Laravel 中的 route:list 命令。
除了标准的使用方法,你还可以使用以下的过滤器:--versions 和 --scopes。
例子
$ php artisan api:routes
$ php artisan api:routes --versions v1
$ php artisan api:routes --scopes read_user_data --scopes write_user_data

3、Postman访问,400

The version given was unknown or has no registered routes

总结:不写了,反正就是报错嘛,究其原因为:

1、laravel本身的  bootstrap/cache/routes.php  表示路由缓存,一般我们都是写成控制器路由或资源路由的形式,它不支持路由闭包的形式。
2、DingoApi就是需要写成闭包的形式。 

三:解决办法:就是放弃使用laravel自带的路由缓存,执行命令:

php artisan route:clear

这样,bootstrap/cache/routes.php文件夹就消失了,当你执行laravel的:php artisan route:cache 或者Dingo的:php artisan api:cache,文件就又生成了,这个可以再项目上线后使用,加快路由加载速度。

 

 

DingoApi的三种写法: 

#命名路由
$api->version('v1',[
    'namespace' => 'App\Http\Controllers',
], function ($api) {
    $api->post('reg',['as'=>'reg','uses'=>'ApiController@register']);
});

$api->version('v1',[
    'namespace' => 'App\Http\Controllers',
], function ($api) {
    $api->post('reg','ApiController@register');
});


$api->version('v1', function ($api) {
//    $api->get('reg', 'App\Http\Controllers\ApiController@register');
});



//下一个版本v2  ,对于网页端接口来说命名路由好一点
$api->version('v2',[
    'namespace' => 'App\Http\Controllers',
], function ($api) {
    $api->post('reg',['as'=>'reg','uses'=>'ApiV2Controller@register']);
});

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值