crystoline/laravel-rest-api

Laravel Rest Api 库。快速编写 rest api

v2.0.0 2022-02-15 14:35 UTC

This package is auto-updated.

Last update: 2024-09-18 14:46:17 UTC


README

laravel-rest-api

Build Status Code Intelligence Status Code Quality Latest Stable Version Total Downloads License

描述

通过简单步骤在 Laravel 中提供 rest api。避免重复的 CRUD/Bread 流程。这有助于您专注于业务逻辑

Say Thanks!

安装

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;
    }
}