chiariello / laravel-api-crud-maker
用于创建具有过滤功能的API CRUD的包
0.1.0
2023-09-24 22:51 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^10.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.8
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
README
在Laravel项目中创建具有过滤功能的API CRUD
安装
通过composer
composer require chiariello/laravel-api-crud-maker
在config/app.php中添加FilterServiceProvider和RequestServiceProvider
'providers' => ServiceProvider::defaultProviders()->merge([ /* * Package Service Providers... */ /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, Chiariello\LaravelApiCrudMaker\Providers\FilterServiceProvider::class, // <-- Add This Chiariello\LaravelApiCrudMaker\Providers\RequestServiceProvider::class, // <-- Add This ])->toArray(),
使用方法
创建新的模型和迁移以及控制器
composer php artisan make:model Flight --migration --controller
根据需要编辑迁移文件
Schema::create('flights', function (Blueprint $table) { $table->id(); $table->string('departure'); $table->string('destination'); $table->timestamps(); });
在模型中添加HasFilters特性和fillables属性
namespace App\Models; use Chiariello\LaravelApiCrudMaker\Traits\HasFilters; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Flight extends Model { use HasFactory, HasFilters; protected $fillable = [ 'departure', 'destination' ]; }
扩展CrudController并在控制器类中设置 $model 属性
namespace App\Http\Controllers; use App\Models\Flight; use Chiariello\LaravelApiCrudMaker\Controllers\CrudController; class FlightController extends CrudController { protected string $model = Flight::class; }
在app/Filters目录下创建Filter类,其名称必须为{ModelName}Filter.php(例如FlightFilters.php)。
现在需要设置过滤数组,并为每个过滤属性创建一个方法。
namespace App\Filters; use Chiariello\LaravelApiCrudMaker\Filters\AbstractFilters; class FlightFilters extends AbstractFilters { protected array $filters = [ 'departure', 'destination' ]; public function departure(string $departure) { $this->like('departure', $departure); } public function destination(string $destination) { $this->like('destination', $destination); } }
创建一个名为{{ModelName}}Request.php的表单请求
php artisan make:request FlightRequest
设置验证并创建和更新逻辑。
namespace App\Http\Requests; use App\Models\Flight; use Illuminate\Foundation\Http\FormRequest; class FlightRequest extends FormRequest { /** * Determine if the user is authorized to make this request. */ public function authorize(): bool { return true; } /** * Get the validation rules that apply to the request. * * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string> */ public function rules(): array { return [ // ]; } public function persist(){ if($this->id){ return Flight ::findOrFail($this->id) ->update($this->all()); } return Flight::create($this->all()); } }
在api.php中添加路由
use App\Http\Controllers\FlightController; use Chiariello\LaravelApiCrudMaker\Utils\RouteUtility; RouteUtility::controllerRoutes(FlightController::class,'flights');