solumdesignum/scenarios

Laravel 动态验证场景

v2.00 2024-08-31 22:28 UTC

This package is auto-updated.

Last update: 2024-09-13 16:04:49 UTC


README

StyleCI Scrutinizer Code Quality Total Downloads Latest Stable Version Latest Unstable Version MIT Licensed

介绍

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 许可证