是否有可能将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()),
],
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',
];
}
}
您始终可以在表单请求类中覆盖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',
// [...]
];
}
}