Laravel API开发实践

1. 创建模型

$ php artisan make:model Lesson -m

--migration or -m 代表自动创建一个数据库迁移文件

2. 创建数据库迁移

Schema::create('lessonss', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
    $table->text('body');
    $table->boolean('free');
    $table->timestamps();
});

3. 执行数据库迁移

$ php artisan migrate

4.创建控制器

$ php artisan make:controller App\\Api\\Controllers\\LessonsController

5.添加路由

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
    $api->group(['namespace' => 'App\Api\Controllers'], function ($api) {
        $api->get('lessons', 'LessonsController@index');
        $api->get('lessons/{id}', 'LessonsController@show');
    });
});

6.添加控制器方法

public function index()
{
    $lessons =  Lesson::all();
    
    return response()->json($data);
}

7.创建返回数据的模板

use App\Lesson;
use League\Fractal\TransformerAbstract;

class LessonTransformer extends TransformerAbstract
{
    public function transform(Lesson $lesson)
    {
        return [
            'title' => $lesson['title'],
            'content' => $lesson['body'],
            'is_free' => (boolean)$lesson['free']
        ];
    }
}

8.修改控制器方法,让返回数据使用模板

public function index()
{
    $lessons =  Lesson::all();

    return $this->collection($lessons,new LessonTransformer());
}

9.使用Dingo的helpers

use Dingo\Api\Routing\Helpers;

class Controller extends BaseController
{
    use Helpers,AuthorizesRequests, DispatchesJobs, ValidatesRequests;

}