php - 如果 Laravel 自定义验证中输入数组包含多个值,则不会对其进行验证

标签 php laravel

塞纳里奥:

  • 每个类别下的标题都是唯一的。
  • 我想编写一个自定义验证器,用于检查是否存在与类别相同的标题。

问题:

如果我添加一个标题,它会验证同一类别下的唯一性。这样的: It is working

但是如果我添加多行,验证将不起作用。这样的: enter image description here

我认为“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/

相关文章:

php - Laravel:当用户表中的特定列发生变化时如何触发事件?

php - 使用 Carbon 返回人类可读的日期时间差

php - MySQL 中存储的 JSON 编码 POST 的问题

php - 如何配置 PHPUnit 以测试 ZF2 应用程序中的整个供应商文件夹?

php - 如何格式化 PHP 中的列表以用作 Objective C 中的 NSArray?

php - 处理数据库连接中的各种错误-有些不起作用?

javascript - 如果数据包含制表符,则从数据库格式化数据

laravel - 如何设置同一IP地址80端口的域名和子域名?

php - 如何修改 Laravel Jetstream 登录

html - 如何在 Laravel Blade 模板中定义超链接?