3

我有一个表单请求验证文件,它检查输入字段是否为空('required'),然后检查它的值是否存在于 table 的数据库中'table1'

我想向同一个输入字段添加第二个存在规则,如果不满足第二个存在验证规则,则返回一条消息:

public function rules()
    {
        return [
            'tour' => 'required|exists:table1,id|//another exists: table2, id//'
        ];
    }

        public function messages()
    {
        return [
            'tour.required' => 'Message 1!',
            'tour.exists:table1,id' => 'Message 2!',
            'tour.//another exists: table2, id//' => 'Message 3!'
        ];
}

现在只有第二条规则有效。任何想法如何做?:)

谢谢大家!

4

1 回答 1

1

在这种情况下,您可以编写自定义验证规则。例如,让我们创建一个名为 CustomValidator 的类(将他放在“App\Services”之类的文件夹或您想要的其他文件夹中)。

CustomValidator.php

namespace App\Services;

class CustomValidator {
    public function myexistsValidate($attribute, $value, $parameters, $validator) {
        for ($i = 0; $i < count($parameters); $i += 2) {
            $count = \DB::table($parameters[$i])->where($parameters[$i + 1], $value)->count();
            if (!$count) {
                return false;
            }
        }

        return true;
    }
}

我们创建了一个名为 的新规则myexists。此规则可以接受以逗号分隔的参数对:'myexists:table1,searchfield1,table2,searchfield2...'` .

接下来,您必须在方法中的 AppServiceProvider 中注册自己的验证规则boot(作为第一个参数放置的字符串将是新规则的名称):

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use \Validator;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('myexists', 'App\Services\CustomValidator@myexistsValidate');
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

接下来在您的 FormRequest 放置代码中,如下所示:

public function rules()
{
    $rules = [
        'id' => 'myexists:tableName1,field1,tableName2,field2',
    ];
    return $rules;
}

您可以为此规则添加验证消息,例如在您的lang\en\validation.php文件中'myexists' => 'Field :attribute must exists in all described tables.'

于 2017-06-30T18:54:36.533 回答