solumdesignum / scenarios
Laravel 动态验证场景
v2.00
2024-08-31 22:28 UTC
Requires
- php: ^8.1|^8.2|^8.3|^8.4
- illuminate/support: ^5|^6|^7|^8|^9|^10|^11|^12
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^5|^6|^7|^8|^9
- phpunit/phpunit: ^8|^9|^10|^11
- sempro/phpunit-pretty-print: ^1.4
README
介绍
Scenarios 是一个无后端验证场景包。
安装
要开始使用,请使用 Composer 包管理器安装 Scenarios
composer require solumdesignum/scenarios
接下来,使用 vendor:publish 命令发布 Scenarios 资源
php artisan vendor:publish --provider="SolumDeSignum\Scenarios\ScenariosServiceProvider"
此命令会将 scenarios.php 配置发布到您的配置目录,如果不存在则会创建。
从 v1.xx 升级到版本 v2.00
UPGRADE_V2.md !!!
Scenarios 功能
Scenarios 配置文件包含一个配置数组。
<?php declare(strict_types=1); return [ 'features' => [ 'set_method' => [ 'from' => [ 'controller' => true, 'url_segment' => false, ], 'exceptions' => [ 'controller' => true ], ], ], 'methods' => [ 'pattern' => '/create|store|update|destroy/im', ], ];
带控制器的场景
在使用之前必须更改配置
<?php declare(strict_types=1); return [ 'features' => [ 'set_method' => [ 'from' => [ 'controller' => true, 'url_segment' => false, ], 'exceptions' => [ 'controller' => false ], ], ], 'methods' => [ 'pattern' => '/create|store|update|destroy/im', ], ];
现在我们已经准备好在控制器中使用它了。
<?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Http\Request; use SolumDeSignum\Scenarios\Traits\Scenarios; class ExampleControler extends Controller { use Scenarios; /** * Display a listing of the resource. */ public function index(): void { dump($this); dd($this->scenario); } /** * Show the form for creating a new resource. */ public function create(): void { if ($this->scenario === 'create') { // my logic } } /** * Store a newly created resource in storage. */ public function store(Request $request): void { if ($this->scenario === 'store') { // my logic } } /** * Display the specified resource. */ public function show(string $id): void { dump($this); dd($this->scenario); } /** * Show the form for editing the specified resource. */ public function edit(string $id): void { dump($this); dd($this->scenario); } /** * Update the specified resource in storage. */ public function update(Request $request, string $id): void { if ($this->scenario === 'update') { // my logic } } /** * Remove the specified resource from storage. */ public function destroy(string $id): void { if ($this->scenario === 'destroy') { // my logic } } }
带有您表单请求验证的场景
<?php declare(strict_types=1); namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Auth; use SolumDeSignum\Scenarios\Traits\Scenarios; class OfficeBlogRequest extends FormRequest { use Scenarios; /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize(): bool { return Auth::check(); } /** * Get the validation rules that apply to the request. * * @return array */ public function rules(): array { $rules = []; if ($this->scenario === 'store') { $rules = [ 'title' => 'required|string', 'publish_at' => 'required', 'blog_category_id' => 'required|numeric', 'description' => 'required', ]; } if ($this->scenario === 'update') { $rules = [ 'title' => 'required|string', 'publish_at' => 'required', 'blog_category_id' => 'required|numeric', 'description' => 'required', 'img' => 'image', ]; } if ($this->scenario === 'destroy') { $rules = []; } return $rules; } }
验证规则用法
然而,这两个示例都可以使用
namespace App\Validation; class SampleRules { public static function ScenarioRules(string $scenario): ?array { switch ($scenario) { case $scenario === 'store'; return [ 'text' => 'required|string', ]; break; case $scenario === 'update'; return [ 'text' => 'required|string', 'description' => 'required|string', ]; break; } } }
带控制器的场景
手动创建验证器
<?php declare(strict_types=1); namespace App\Http\Controllers\Office\Blog; use App\Validation\SampleRules; use Illuminate\Support\Facades\Validator; use SolumDeSignum\Scenarios\Traits\Scenarios; class BlogController { use Scenarios; public function store(Request $request) { $validator = Validator::make($request->all(), SampleRules::ScenarioRules($this->scenario)); if ($validator->passes()) { #Your Logic Code } } }
控制器函数名称示例
然而,您可以在配置中覆盖正则表达式以符合您的命名约定
<?php declare(strict_types=1); return [ 'methods' => [ 'pattern' => '/create|store|update|destroy/im' ] ]; #Controller Function Naming Samples: create(), store() , update() , destroy()
作者
支持
如果您需要支持,您可以在 Twitter 上提问。
许可证
Solum DeSignum Scenarios 是开源软件,许可协议为 MIT 许可证。