使用laravel的dingoapi插件

时间:2021-10-04 02:16:13

dingoapi是一个laravel的开源插件,可以在github上搜索到,现在在做一个项目,项目中总是会有后端跟前端的json数据交互,而这个dingoapi为json交互提供了很大的便利。

先安装dingoapi

1、在composer.json中的require中添加"dingo/api": "1.0.*@dev",然后在项目根目录运行composer update

注意:dingoapi如果直接用composer require dingo/api:1.0.x@dev的方式安装是安装不成功的,

因为这个包作者本人还是将其设置为开发中,非稳定版,但是实际上这个包经过验证是稳定的,已经有4500+的star了。

2、在config/app.php中注册服务提供者到providers

Dingo\Api\Provider\LaravelServiceProvider::class,

3、生成dingoapi的配置文件

php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"

会在config文件夹里生成api.php这个配置文件

4、将api.php中的prefix默认值设置为api,也可以不是api,但是必须要有个后缀,后缀不要设置为"http://www.mamicode.com/",如果设置为"http://www.mamicode.com/",laravel的视图跟api会弄混淆,比如,在laravel中自定义了一个404错误页面,如果这里设置为"http://www.mamicode.com/"的话,访问不存在的页面的时候,会返回格式为json的错误信息,因为dingapi就是做接口用的,不管什么都会被转为json。

那如果想把视图跟api区分开来,路由文件需要这么写,以下是例子:

<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | This file is where you may define all of the routes that are handled | by your application. Just tell Laravel the URIs it should respond | to using a Closure or controller method. Build something great! | */ Route::post(‘/test‘,‘AdminController@test‘); Route::post(‘/hook‘,‘HookController@hook‘); #后台管理系统登录视图 Route::get(‘/admin‘,‘AdminController@loginView‘); Route::get(‘/admin/login‘,‘AdminController@loginView‘); #后台管理系统登录api Route::post(‘/admin/login‘,‘AdminController@login‘); #退出登录api Route::get(‘/logout‘,‘UserController@logout‘); #管理员可见视图 Route::group([‘middleware‘ => [‘role:admin‘]], function () { #用户列表视图 Route::get(‘/users‘,‘AdminController@users‘); #添加用户视图 Route::get(‘/add_user‘,‘AdminController@addUserView‘); #机修列表视图 Route::get(‘/mechanics_list‘,‘MechanicsController@dataList‘); #配件列表视图 Route::get(‘/parts_list‘,‘PartsController@dataList‘); #添加配件视图 Route::get(‘/add_part‘,‘PartsController@addView‘); Route::match([‘get‘,‘post‘],‘/mechanics_add‘, ‘MechanicsController@add‘); Route::get(‘/edit_user/{id}‘,‘AdminController@editUserView‘); Route::get(‘/video‘,function(){ return view(‘video‘,[‘title‘=>"视频播放"]); }); }); $api = app(‘Dingo\Api\Routing\Router‘); $api->version(‘v1‘, function ($api) { $api->group([‘namespace‘ => ‘App\Http\Controllers\Api‘], function ($api) {
//namespace声明路由组的命名空间,因为上面设置了"prefix"=>"api",所以以下路由都要加一个api前缀,比如请求/api/users_list才能访问到用户列表接口
$api->group([‘middleware‘=>[‘role:admin‘]], function ($api) { #管理员可用接口 #用户列表api $api->get(‘/users_list‘,‘AdminApiController@usersList‘); #添加用户api $api->post(‘/add_user‘,‘AdminApiController@addUser‘); #编辑用户api $api->post(‘/edit_user‘,‘AdminApiController@editUser‘); #删除用户api $api->post(‘/del_user‘,‘AdminApiController@delUser‘); #上传头像api $api->post(‘/upload_avatar‘,‘UserApiController@uploadAvatar‘); }); }); });

需要新建一个BaseController: