Laravel - 使用'exists'验证,包括“ALL”

时间:2015-12-01 23:13:30

标签: php validation laravel laravel-validation

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

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

post_types表中不存在我的'all'值,因此exists:post_types,id之类的验证规则不起作用。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

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

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'],
];

答案 1 :(得分:0)

你还没有指明它是哪个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

}

请注意,这只是一个概念证明,如果你想要的话,你可以将同一个任务委托给另一个班级。

希望这有帮助!