【问题标题】:How to do a validation conditional in this case with Laravel?在这种情况下,如何使用 Laravel 进行条件验证?
【发布时间】:2017-05-18 13:51:30
【问题描述】:

我有两个字段。 author_idteacher_id。我希望一个或另一个是必需的,但如果两者都被填满,它会显示一条错误消息“只能有一个”。

是否可以使用 Laravel 中的验证规则来做到这一点?我不明白文档。也许一个例子会更有意义(和解释)

【问题讨论】:

    标签: laravel


    【解决方案1】:

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

    /**
     * @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】:

      你应该使用required_without:foo,bar,...here

      示例

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

      【讨论】:

      • 抱歉,我测试了您的解决方案。它有效,但如果我填写两个字段,当我不想填写所有字段时它也有效。只有一个或另一个,但不能两者兼而有之。
      • 能否详细解释一下?
      • 我有一个字段teacher_id和一个字段author_id(实际上,他们都是作者,但信息不同)。每篇文章我只想要一个作者(因此,一个teacher_id 或一个author_id)。因此,如果我填写我的行政部门,我希望它出错(你只能选择一个,不能同时选择两者)。
      • 看到这个stackoverflow.com/questions/30635678/… 有点骇人听闻,但可以按预期工作
      【解决方案3】:

      这里提到了 2 种不同的方法来进行条件验证 例如如果 deviceType 是“android”,则需要登录功能 fcmToken

      1. 在控制器中

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

      if($request->has('deviceType') && $request['deviceType'] == "android") {
      $请求->验证([ 'fcmToken' => '必需',
      );
      } }

      1. 在请求扩展类中

      使用 Illuminate\Foundation\Http\FormRequest;
      类 LoginRequest 扩展 FormRequest { 公共函数授权() { 返回真; }

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        相关资源
        最近更新 更多