塞纳里奥:
- 每个类别下的标题都是唯一的。
- 我想编写一个自定义验证器,用于检查是否存在与类别相同的标题。
问题:
我认为“CategoryResolverTitle”文件中的 foreach 被执行了一次。解决办法是什么。 我的表格
<label for="Title">Title</label>
<input type="text" name="names[]" class="form-control">
我的自定义验证器:
<?php
namespace App\Rules;
use App\Models\QueryManagement\CategoryResolver;
use Illuminate\Contracts\Validation\Rule;
class CategoryTitle implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
foreach ($value as $element) {
return !Category::whereDepartmentId(request('department'))->whereName($element)->exists();
}
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Title under same category must be unique';
}
}
最佳答案
您当前的passes()
函数似乎有问题。它只会启动一次循环,然后立即返回第一次检查的结果。更好的方法是:
foreach ($value as $element) {
if(Category::whereDepartmentId(request('department'))->whereName($element)->exists()){
return false;
}
}
return true;
关于php - 如果 Laravel 自定义验证中输入数组包含多个值,则不会对其进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68920655/