Laravel 自定义验证规则
Posted
技术标签:
【中文标题】Laravel 自定义验证规则【英文标题】:Laravel custom validation rule 【发布时间】:2017-04-11 17:20:57 【问题描述】:如何为一个输入值必须是整数并以 120 开头的输入制定自定义验证规则?
我已经阅读了有关制作自定义消息的信息,但不了解规则。
我想使用正则表达式来验证数据。 ^120\d11$
这是我的正则表达式。
我是 Laravel 的新手,这就是为什么现在无法想象如何做到这一点。
在$this->validate($request, []);
中使用它的自定义验证
现在我正在验证这样的数据:
$this->validate($request, [
'user_id' => 'integer|required',
'buy_date' => 'date',
'guarantee' => 'required|unique:client_devices|number',
'sn_imei' => 'required|unique:client_devices',
'type_id' => 'integer|required',
'brand_id' => 'integer|required',
'model' => 'required'
]);
我要添加自定义验证的输入是guarantee
【问题讨论】:
【参考方案1】:从 Laravel 5.5 开始,您可以直接在 request
对象上进行验证。
public function store(Request $request)
$request->validate([
'guarantee' => 'regex:/^120\d11$/'
]);
【讨论】:
【参考方案2】:最快最简洁的方法是在控制器操作中添加inline validator:
public function store(Request $request)
$validator = Validator::make($request->all(), [
'number' => [
'regex' => '/^120\d11$/'
],
]);
if ($validator->fails())
return redirect('post/create')
->withErrors($validator)
->withInput();
return view('welcome');
其中number
是请求中提交的字段的name
。
如果您有很多验证工作要做,您可能需要考虑改用Form Request,作为整合大量验证逻辑的一种方式。
【讨论】:
Method [validate/^120\d11$/] does not exist.
我收到错误消息 :(
我也在使用'required|unique:client_devices|number'
这个输入。
'guarantee' => [ 'required', 'unique:client_devices', 'regex:/^120\d11$/', ],
终于找到我需要的了)【参考方案3】:
您可以在控制器中创建自定义验证:
$name = Input::get('field-name')
$infoValidation = Validator::make(
array( // Input array
'name' => $name,
),
array( // rules array
'name' => array("regex:/^120\d11$"),
),
array( // Custom messages array
'name.regex' => 'Your message here',
)
); // End of validation
$error = array();
if ($infoValidation->fails())
$errors = $infoValidation->errors()->toArray();
if(count($errors) > 0)
if(isset($errors['name']))
$response['errCode'] = 1;
$response['errMsg'] = $errors['name'][0];
return response()->json(['errMsg'=>$response['errMsg'],'errCode'=>$response['errCode']]);
希望这会有所帮助。
【讨论】:
Validator::make()
之后我可以在$this->validate($request, []);
中使用它吗?以上是关于Laravel 自定义验证规则的主要内容,如果未能解决你的问题,请参考以下文章