【问题标题】:Laravel - Validation with 'exists' including also "ALL"Laravel - 使用“存在”进行验证,包括“全部”
【发布时间】:2016-03-06 01:27:29
【问题描述】:

我有一个包含 post_types 的表。当用户想要搜索 post_types 时,我必须验证他们从表单中选择的任何内容。我计划允许他们一次搜索特定的一种类型或所有类型(还没有计划允许他们进行多项选择)。所以我的选择是这样的

['all' => 'all',
1 => 'User Post',
2 => 'Editor Post',
3 => .... etc]

post_types 表中不存在我的“全部”值,因此像 exists:post_types,id 这样的验证规则将不起作用。我还能怎么做?

【问题讨论】:

    标签: php validation laravel laravel-validation


    【解决方案1】:

    你还没有指定它是哪个 Laravel 版本,所以我假设它是目前最新的稳定版本(5.1)。

    鉴于我们处于控制器方法中,您可以按照以下方式进行操作

    public function foo(Request $request)
    {
    
      if ($type = $request->post_type != 'all') 
      {
        $data = Post::whereType($type)->get();
      }
      else
      {
        $data = Post::all();
      }
    
      // the rest of your code
    
    }
    

    请注意,这只是一个概念证明,如果您愿意,您可以将相同的任务委托给不同的班级。

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      如何创建您的自定义验证规则?

      Validator::extend('availablePostTypes', function($attribute, $value,  $parameters, $validator) {
              $isAvailable = false;
      
              if ($value === 'all'){
                  $isAvailable = true;
              }
      
              // query for existence
              else {
                  $count = Post::where('type', $value)->count();
                  $isAvailable = (0 < $count);
              }
      
              return $isAvailable;
          });
      

      最后,只需调用规则:

      $rules = [
          'post_types'=> ['availablePostTypes'],
      ];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-10
        • 1970-01-01
        • 2015-05-14
        • 1970-01-01
        • 2015-10-13
        • 2022-01-12
        • 2017-03-26
        相关资源
        最近更新 更多