crystoline / laravel-rest-api
Laravel Rest Api 库。快速编写 rest api
v2.0.0
2022-02-15 14:35 UTC
Requires
- php: >=7.0
- illuminate/database: ^5.8|^6.0|^7.0|^8.0
- illuminate/support: ^5.8|^6.0|^7.0|^8.0
Requires (Dev)
- phpunit/phpunit: 4.8.*
README
laravel-rest-api
描述
通过简单步骤在 Laravel 中提供 rest api。避免重复的 CRUD/Bread 流程。这有助于您专注于业务逻辑
安装
composer require crystoline/laravel-rest-api
##使用
控制器示例
<?php namespace App\Http\Controllers; use Crystoline\LaraRestApi\RestApiTrait; use Crystoline\LaraRestApi\IRestApiAble; use Crystoline\LaraRestApi\TestModel; class TestController extends Controller implements IRestApiAble { use RestApiTrait; /** * Define the Eloquent Model. * This line is required. */ public static function getModel() : string { return TestModel::class; } public static function getValidationRules(): array { return [ "name" => "required", "email" => "required|email", "password" => "required|password_confirmed" ]; } }
路由示例
<?php Route::prefix('users')->group( function () { Route::get('', 'TestController@index'); Route::get('show/{id}', 'TestController@show'); Route::post('store', 'TestController@store'); Route::put('update/{id}', 'TestController@update'); Route::put('delete/{id}', 'TestController@destroy'); });
或者
<?php Route::resource('users', 'TestController');
过滤器
您可以为列表方法添加过滤器
<?php namespace App\Http\Controllers; use Crystoline\LaraRestApi\RestApiTrait; use Crystoline\LaraRestApi\IRestApiAble; use Crystoline\LaraRestApi\TestModel; use Illuminate\Http\Request; class TestController2 extends Controller implements IRestApiAble { use RestApiTrait; /** * Define the Eloquent Model. * This line is required. */ public static function getModel() : string { return TestModel::class; } public static function filter(Request $request, $query) { if($request->input('user_id')){ $user_id = $request->input('user_id'); $query->where(user_id, $user_id); } } }
搜索
默认已提供搜索功能,通过查询/POST 参数传递搜索查询('search'”)
<?php namespace App\Http\Controllers; use Crystoline\LaraRestApi\RestApiTrait; use Crystoline\LaraRestApi\IRestApiAble; use Crystoline\LaraRestApi\TestModel; use Illuminate\Http\Request; class TestController3 extends Controller implements IRestApiAble { use RestApiTrait; /** * Define the Eloquent Model. * This line is required. */ public static function getModel() : string { return TestModel::class; } public static function searchable(): array { return [ 'last_name', 'first_name' ]; } }
排序
<?php namespace App\Http\Controllers; use Crystoline\LaraRestApi\RestApiTrait; use Crystoline\LaraRestApi\IRestApiAble; use Crystoline\LaraRestApi\TestModel; use Illuminate\Http\Request; class TestController4 extends Controller implements IRestApiAble { use RestApiTrait; /** * Define the Eloquent Model. * This line is required. */ public static function getModel() : string { return TestModel::class; } public static function orderBy(): array { return [ 'last_name' => 'ASC' ]; } }
事件
您可以在控制器操作前后添加事件。beforeList,afterList, beforeStore, afterStore, beforeShow, afterShow 等。
<?php namespace App\Http\Controllers; use Crystoline\LaraRestApi\RestApiTrait; use Crystoline\LaraRestApi\IRestApiAble; use Crystoline\LaraRestApi\TestModel; use Illuminate\Http\Request; class TestController5 extends Controller implements IRestApiAble { use RestApiTrait; /** * Define the Eloquent Model. * This line is required. */ public static function getModel() : string { return TestModel::class; } public function beforeStore(Request $request): bool { $password = $request->input('password'); if(!empty($password)) { $request->merge(['password' => bcrypt($password)]); return true; } return false; } }