Laravel 5.5 / Validator /自定义规则

时间:2017-12-11 12:57:12

标签: laravel validation

(编辑为更清楚的目的)

几个月前我发现了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

    }
}

1 个答案:

答案 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;
}