thoca / rest
Rest - 一个简单的API REST代码生成器。
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
安装
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)。有关更多信息,请参阅许可证。