Laravel 5.1:使用自定义错误消息进行自定义验证

时间:2015-10-14 20:15:44

标签: php validation laravel-5.1

我有自定义验证,我将其添加到表单请求中:

public function rules()
{
    return [
        ...
        "firstCheckbox" => "required_with_one_of:secondCheckbox,thirdCheckbox",
        ...
    ];
}

规则是,如果用户选择firstCheckbox,则他需要从给定参数中选择至少一个复选框:secondCheckboxthirdCheckbox

为了实现这一点,我在代码后添加了AppServiceProvider.php的启动功能:

    Validator::extend('required_with_one_of', function($attribute, $value, $parameters, $validator)
    {
        $data = $validator->getData();
        foreach ($parameters as $p) {
            if ( array_get($data,$p) != null) {return true;}
        }

        return false;
    });
    Validator::replacer('required_with_one_of', function($message, $attribute, $rule, $parameters) {
        return str_replace(':values', implode(' / ', $parameters), $message);
    });

所有这一切都很好但如果我没有想到什么,请指出它,以便我可以解决它。

我真正的问题在于消息。我收到的消息是:

"您必须至少选择以下一个字段:secondCheckbox,thirdCheckbox"

但我想要的是得到消息:

"您必须至少选择以下一个字段:第二个复选框,第三个复选框"

到我的lang\en\validation.php attributes[]我添加了

'secondCheckbox' => 'Second Checkbox'

'thirdCheckbox' => 'Third Checkbox'

值,但这不起作用,因为我从不替换$parameters中的Validator::replacer()值。

我查看了Validator类,并且有一个简单的函数来处理所有这些

$parameters = $this->getAttributeList($parameters);

但我无法从Validator::replacer()拨打该电话。

是否有一种简单的方法可以从Validator::replacer()调用此函数,或者我应该创建CustomValidator类来扩展Validator

如果第二种方式是可行的,有人可以给我指示如何做到这一点。我从来没有在这个级别上真正使用PHP,所以尽管我已经大致知道该怎么做,但我并不确定如何做到这一点。

0 个答案:

没有答案