(编辑为更清楚的目的)
几个月前我发现了Laravel,我跟随了一些Laracast视频。现在,我遇到了自定义验证器的问题。
我有正常和永久的规则(date | required | min / max)来验证我的表单请求。这部分有效。
但是我有一个自定义验证可以验证为正常规则如果请求参数之一 - select1 - 设置为1(例如)。
我读了十几个解释,但还不够清楚。
所以,让我们开始使用我的代码。谢谢你的放纵...... 我的问题是底部的customTest函数。
谢谢,
1 /我用
发了一个新请求php artisan make:controller priceRequest.php
2 /我制定了一些规则并更改了一些内容。
public function authorize()
{
return true;
}
// Permanent RULES
public function rules()
{
$rules = [
'field1' => 'required|min:1|max:15',
'field2' => 'required',
'date1' => 'required|date',
'select1' => 'required',
];
return $rules;
}
然后我集成了一个新功能来执行自定义验证
public function withValidator($validator) {
$validator->after(function ($validator) {
if (!$this->customTests($this->request->get('data'))){
$validator->errors()->add('custom', 'Something is wrong');
}
});
}
最后,我编写了customTests函数,它就在这个内部我被卡住了!!
public function customTests($data) {
if ($data['select1'] == 1) {
// HERE MY QUESTION
// I'd like to verify that $data['date2']
// is a date and is set. So, I'd like to
// add a rule to rules (has I made with
// 'date1' => 'required|date',
// and return TRUE if the rule match or
// FALSE
}
}
答案 0 :(得分:0)
所以,我找到了解决问题的方法。
我犯了一个错误和混乱,因为我试图将新规则添加到 - > after()函数中。
因此,正确的代码如下:
public function withValidator($validator)
{
$validator->sometimes('ticket.price', 'required|integer|min:0.1', function ($input) {
if ($any_condition_who_need_to_verify_new_rule) {
return true;
}
else {
# Everything is perfect, this rule cas be omitted
}
$validator->after(function ($validator) use ($ticket) {
/* New test more complicated which cannot be
tested with a rule */
if ($this_test_is_complex_and_fails) {
$validator->errors()->add('validateTicket', 'This is another problem');
return false;
}
});
return $validator;
}