【问题标题】:Laravel Form Request several validation rules of same typeLaravel 表单请求多个相同类型的验证规则
【发布时间】:2017-12-04 18:44:00
【问题描述】:

我有一个表单请求验证文件,它检查输入字段是否不为空 ('required'),然后检查它的值是否存在于表 '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!'
        ];
}

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

提前谢谢大家!

【问题讨论】:

    标签: laravel laravel-validation laravel-form


    【解决方案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' =&gt; 'Field :attribute must exists in all described tables.'

    【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2017-06-13
    • 1970-01-01
    • 2017-12-06
    • 2020-07-17
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多