Laravel - 使用 'exists' 进行验证,还包括 "ALL"
Laravel - Validation with 'exists' including also "ALL"
我有一个 table,其中包含 post_types。当用户想要搜索 post_types 时,我必须从表单中验证他们 select 的任何内容。我计划允许他们一次搜索特定的一种类型或所有类型(尚无计划允许他们使用多个 selection)。所以我的select有这样的东西
['all' => 'all',
1 => 'User Post',
2 => 'Editor Post',
3 => .... etc]
我的 'all' 值在 post_types
table 中不存在,因此像 exists:post_types,id
这样的验证规则将不起作用。我还能怎么做?
你没有指定是哪个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
}
请注意,这只是一个概念验证,如果需要,您可以将同一任务委托给不同的 class。
希望对您有所帮助!
如何创建您的自定义验证规则?
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'],
];
我有一个 table,其中包含 post_types。当用户想要搜索 post_types 时,我必须从表单中验证他们 select 的任何内容。我计划允许他们一次搜索特定的一种类型或所有类型(尚无计划允许他们使用多个 selection)。所以我的select有这样的东西
['all' => 'all',
1 => 'User Post',
2 => 'Editor Post',
3 => .... etc]
我的 'all' 值在 post_types
table 中不存在,因此像 exists:post_types,id
这样的验证规则将不起作用。我还能怎么做?
你没有指定是哪个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
}
请注意,这只是一个概念验证,如果需要,您可以将同一任务委托给不同的 class。
希望对您有所帮助!
如何创建您的自定义验证规则?
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'],
];