使用逻辑运算符进行Laravel表单验证

时间:2016-06-21 04:49:29

标签: forms validation request laravel-5.2 rules

当用户填写留言(textarea)时,他/她无法填写日期,时间,地点值。
只有当Message为空且所有这三个字段都被填充时,这三个字段才会考虑 如何使用Laravel表单验证执行此操作?是否可以在Request的规则方法中定义这些逻辑?
我是Laravel的新人 提前致谢

This is my form

2 个答案:

答案 0 :(得分:4)

您可以使用条件验证规则来实现此目的(服务器端):

  • required_if:anotherfield,值,...
  • required_unless:anotherfield,值,...
  • required_with:FOO,酒吧,...
  • required_with_all:FOO,酒吧,...
  • required_without:FOO,酒吧,...
  • required_without_all:FOO,酒吧,...

我会说你的情况:

    除非邮件已填写,否则
  • 日期是必需的 除非邮件已填写
  • ,否则
  • 时间是必需的 除非邮件已填写
  • ,否则
  • 场地是必需的
  • 消息是必需的,没有日期,时间,地点

链条规则,如果您需要用管道分隔它们

按照示例代码段进行操作。在 ExampleFormRequest 扩展Request

中使用此方法
/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    $rules = [];

    switch ($this->method()) {
        case 'PATCH':
        case 'PUT':
        case 'POST':
            $rules = [
                'date'    => 'required_without:message',
                'time'    => 'required_without:message',
                'venue'   => 'required_without:message',
                'message' => 'required_without_all:date,time,venue',
                ];
            break;
        default:
            // Perform no alteration to rules
            break;
    }

    return $rules;
}

结帐documentation here

答案 1 :(得分:2)

正如您所说的验证规则,例如'消息'这三个领域或所有这些领域('日期','时间'场地')必须填补。因此规则应如下所示。

$rules = [
            'date'    => 'required_with_all:time,venue|required_without:message',
            'time'    => 'required_with_all:date,venue|required_without:message',
            'venue'   => 'required_with_all:date,time |required_without:message',
            'message' => 'required_without_all:date,time,venue',
            ];