thoca/rest

Rest - 一个简单的API REST代码生成器。

维护者

详细信息

github.com/tho-ca/rest

源代码

问题

安装: 268

依赖: 0

建议者: 0

安全: 0

星标: 4

关注者: 3

分支: 0

开放问题: 0

类型:项目

dev-master 2021-09-13 18:05 UTC

This package is auto-updated.

Last update: 2024-09-14 00:32:15 UTC


README

此Laravel包生成具有完整CRUD的存储库模式模型,可加速您的编码。该包将一次性为您生成模型、资源、存储库、请求和控制器,您只需执行命令即可。

php artisan make:rest Post

Demo on Vercel

安装

composer require thoca/rest

预览

结果模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = [
        'name',
    ];
}

结果资源

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class PostResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,

        ];
    }
}

结果存储库

<?php

namespace App\Repositories;

use App\Models\Post;
use App\Repositories\AbstractRepository;
use Illuminate\Support\Facades\DB;

class PostRepository extends AbstractRepository
{
    public function __construct()
    {
        parent::__construct(new Post());
    }

    public function all($search, $per_page = null)
    {
        $query = app(Post::class)->newQuery();

        if ($search['term']) {
            $term = '%' . strtoupper(implode('%', explode(' ', $search['term']))) . '%';

            $query->where('name', 'like', $term);
        }

        if ($per_page) {
            $query->paginate($per_page);
        }

        return $query->orderBy('name')->get();
    }

    public function find($id)
    {
        return Post::find($id);
    }

    public function save($data, $id = null)
    {
        DB::beginTransaction();
        try {
            $model = ($id) ? $this->find($id) : new Post;

            $model->fill($data->all());

            $model->save();

            DB::commit();
            return $model;
        } catch (\Exception $e) {
            DB::rollBack();
            throw new \Exception($e->getMessage(), null, $e);
        }
    }

    public function delete($id)
    {
        DB::beginTransaction();
        try {
            $model = $this->find($id);

            $model->delete();
            
            DB::commit();
            return $model;
        } catch (\Exception $e) {
            DB::rollBack();
            throw new \Exception($e->getMessage(), null, $e);
        }
    }
}

结果请求

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class PostRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required'
        ];
    }

}

结果控制器

<?php

namespace App\Http\Controllers;

use App\Http\Requests\PostRequest;
use App\Http\Resources\PostResource;
use App\Repositories\PostRepository;
use Illuminate\Http\Request;

class PostController extends Controller
{
    public function index(Request $request)
    {
        try {
            $values = new PostRepository();

            $per_page = $request->query('per_page', null);
            $search = ["term" => $request->query('term', null)];

            return PostResource::collection($values->all($search, $per_page));
        } catch (\Exception $e) {
            return response()->json([
                "message" => "Error.",
                "message_raw" => $e->getMessage()
            ], 500);
        }
    }

    public function store(PostRequest $request)
    {
        try {
            $model = (new PostRepository)->save($request);

            return response()->json(new PostResource($model), 201);
        } catch (\Exception $e) {
            return response()->json([
                "message" => "Error.",
                "message_raw" => $e->getMessage()
            ], 500);
        }
    }

    public function show($id)
    {
        try {
            $model = (new PostRepository)->find($id);

            return new PostResource($model);
        } catch (\Exception $e) {
            return response()->json([
                "message" => "Error.",
                "message_raw" => $e->getMessage()
            ], 500);
        }
    }

    public function update(PostRequest $request, $id)
    {
        try {
            $model = (new PostRepository)->save($request, $id);

            return new PostResource($model);
        } catch (\Exception $e) {
            return response()->json([
                "message" => "Error.",
                "message_raw" => $e->getMessage()
            ], 500);
        }
    }

    public function destroy($id)
    {
        try {
            $model = (new PostRepository)->delete($id);

            return new PostResource($model);
        } catch (\Exception $e) {
            return response()->json([
                "message" => "Error.",
                "message_raw" => $e->getMessage()
            ], 500);
        }
    }
}

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证