Laravel Form validation with logic operators

萝らか妹 提交于 2019-12-04 08:28:19

You can achieve this (serverside) by using conditional validation rules:

  • required_if:anotherfield,value,...
  • required_unless:anotherfield,value,...
  • required_with:foo,bar,...
  • required_with_all:foo,bar,...
  • required_without:foo,bar,...
  • required_without_all:foo,bar,...

I would say for your case:

  • date is required unless message is filled-in
  • time is required unless message is filled-in
  • venue is required unless message is filled-in
  • message is required without all date, time, venue

Chain rules if you need by separating them with pipe

Follows an example snippet. Use this method inside your ExampleFormRequest extending 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;
}

Checkout documentation here

As you said the validation rule like the 'Message' field or all of these three ('date','time','venue') have to be filled. So the rules should look like below.

$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',
            ];
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!