在这种情况下如何使用Laravel进行验证?

时间:2017-05-18 13:51:30

标签: laravel

我有两个字段。 author_idteacher_id。我想要一个或另一个,但如果两个都被填满,它会显示一个错误,说“只能有一个”。

是否可以使用Laravel中的验证规则执行此操作?我不懂文档。也许一个例子会更有意义(和解释)

3 个答案:

答案 0 :(得分:1)

您应该使用required_without:foo,bar,...查看here

示例

'author_id' => 'required_without:teacher_id',
'teacher_id' => 'required_without:author_id',

答案 1 :(得分:0)

有时最好在验证挂钩后使用自定义,例如:

/**
 * @return \Illuminate\Validation\Validator
 */
public function validator(): \Illuminate\Validation\Validator
{
    $validator = Validator::make($this->all(), [
        'file' => 'required_without:url|file',
        'url'  => 'required_without:file|url'
    ]);

    if ($this->has('url') && $this->has('file')) {
        $validator->after(function (\Illuminate\Validation\Validator $validator) {
            $validator->errors()->add('url', 'error message');
        });
    }

    return $validator;
}

答案 2 :(得分:0)

这里提到了两种进行条件验证的不同方法 例如如果 deviceType 是“ android”

,则需要登录功能 fcmToken
  1. 在控制器中
  

公共功能登录(请求$ request){
    //如果deviceType存在并且是android,则需要验证fcmToken

     

if($ request-> has('deviceType')&& $ request ['deviceType'] ==“ android”)       {
         $ request-> validate([            'fcmToken'=>'必填',
           );
         }       }

  1. 在请求扩展类中
  

使用Illuminate \ Foundation \ Http \ FormRequest;
      LoginRequest类扩展FormRequest {           公共功能authorize()           {               返回true;           }

    public function rules()
    {
        return [
            'email'    => 'required|string',
            'password' => 'required',
            'fcmToken'    => 'string',
            'deviceType' => 'required|string'
        ];
    } }