Laravel 5.8验证 - 总是对任何规则保释

问题描述 投票:5回答:2

是否有可能将FormRequest规则设置为默认使用bail规则而不键入?

代替:

class StoreRequest extends FormRequest {
    function rules() {
        return [
            'name' => 'bail|required|min:3',
            'last_name' => 'bail|required|min:3',
            'names' => 'bail|required|min:3',
            'email' => 'bail|required|email',
            'type' => 'integer|min:10|max:50',
            // [...]
        ];
    }
}

我想得到更清洁的版本,如:

class StoreRequest extends FormRequest {

    protected $stopsOnFirstError = true; // I can't find anything like this

    function rules() {
        return [
            'name' => 'required|min:3',
            'last_name' => 'required|min:3',
            'names' => 'required|min:3',
            'email' => 'required|email',
            'type' => 'integer|min:10|max:50',
            // [...]
        ];
    }
}

更新:

我的一些规则被定义为数组:

'type' => [
    'bail',
    'required',
    'integer',
    Rule::in(ContactType::getValues()),
],
laravel validation laravel-5 laravel-validation
2个回答
2
投票

1)不使其更复杂使用字符串替换

<?php
$rules = [
            'name' => 'required|min:3',
            'last_name' => 'required|min:3',
            'names' => 'required|min:3',
            'email' => 'required|email'
        ];
$stopsOnFirstError = true;
if(stopsOnFirstError){
  array_walk($rules, function(&$value, $key) { $value = 'bail|'.$value; } );
}

print_r($rules);
?>

现场演示:Link

输出:

Array
(
    [name] => bail|required|min:3
    [last_name] => bail|required|min:3
    [names] => bail|required|min:3
    [email] => bail|required|email
)

2)您也可以通过添加'*' => 'bail',以申请所有字段来以其他方式执行此操作

class StoreRequest extends FormRequest {
    function rules() {
        return [
            '*' => 'bail',
            'name' => 'required|min:3',
            'last_name' => 'required|min:3',
            'names' => 'required|min:3',
            'email' => 'required|email',
        ];
    }
}

0
投票

您始终可以在表单请求类中覆盖validator方法:

class StoreRequest extends FormRequest {

    private function prependBailOnRule($rule) {
        if (is_string($rule)) {
            return "bail|".$rule;
        } else if (is_array($rule)) {
           return array_merge([ "bail" ], $rule);
        }
    }

    //Adapted from FromRequest::createDefaultValidator
    public function validator(ValidationFactory $factory) {
        return $factory->make(
             $this->validationData(), 
             array_map([$this, 'prependBailOnRule' ], $this->container->call([$this, 'rules'])),
             $this->messages(), $this->attributes()
        );
    }

    function rules() {
        return [
            'name' => 'required|min:3',
            'last_name' => 'required|min:3',
            'names' => 'required|min:3',
            'email' => 'required|email',
            'type' => 'integer|min:10|max:50',
            // [...]
        ];
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.