Laravel L5.5动态请求验证依赖于变量

tit*_*ior 1 php validation laravel laravel-5

在我的控制器中,我有类似的东西:

switch ($type)
    {
        case '1':
            $validation_rules = [
                'a' => 'required',
                'b' => 'required',];
            break;
        case '2':
            $validation_rules = [
                'd' => 'required',
                'j' => 'nullable|numeric',];
            break;
        case '3':
            $validation_rules = [
                't1.x' => 'required|numeric',
                't1.y' => 'required|numeric',];
            break;
    }

$request->validate($validation_rules);
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这样,因为它会使我的控制器大量增加.我正在寻找一种方法来使用请求验证.

这样的东西将成为我的目标:

public function store(XXRequest $request)
Run Code Online (Sandbox Code Playgroud)

并将验证的逻辑放在里面.

Ale*_*nin 5

创建一个新的请求文件:

php artisan make:request SomeRequest
Run Code Online (Sandbox Code Playgroud)

将逻辑放入rules()方法中:

public function rules()
{
    switch ($this->type)
        {
            case '1':
                $validation_rules = [
                    'a' => 'required',
                    'b' => 'required',];
                break;
            case '2':
                $validation_rules = [
                    'd' => 'required',
                    'j' => 'nullable|numeric',];
                break;
            case '3':
                $validation_rules = [
                    't1.x' => 'required|numeric',
                    't1.y' => 'required|numeric',];
                break;
        }

    return $validation_rules;
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

public function store(SomeRequest $request)
Run Code Online (Sandbox Code Playgroud)

https://laravel.com/docs/5.5/validation#form-request-validation