我对嵌套条件的验证规则有问题.

class StoreRequest extends Request
{
        public function authorize(){
        return true;
        }

        public function rules(){
                return [
                    'type_id'     => 'required|integer',
                    'external_id' => 'required_if:type_id,==,3|integer',
                ];
        }
}

事实上,我想:

当我发布表单时,当我 Select 一个等于3的type_id时,规则就会生效.

外部id必须是整数.

我try 添加可为null的条件,但如果不再有效,则需要_

你知道吗?

推荐答案

您的规则执行两个相互独立的判断;只是因为当type_id!=3,并不意味着整数判断被忽略.

你要找的是conditional rule,它可以让你更好地控制何时进行判断,例如:

$validator = Validator::make($data, [
    'type_id'   => 'required|integer'
]);

$validator->sometimes('external_id', 'required|integer', function($input) {
    return $input->type_id == 3;
});

使用表单验证时,可以通过重写getValidatorInstance()方法来访问基础验证程序实例:

class StoreRequest extends Request
{
        public function authorize(){
        return true;
        }

        public function rules(){
                return [
                    'type_id'     => 'required|integer'
                ];
        }

        protected function getValidatorInstance() {
            $validator = parent::getValidatorInstance();
            $validator->sometimes('external_id', 'required|integer', function($input) {
                return $input->type_id == 3;
            });
            return $validator;
        }
}

Laravel相关问答推荐

有没有办法使用laravel EXCEL读取和修改EXCEL文件?

在Vite list 中找不到文件:Resources/scss/hrms.scss.如何使用LARAVEL VITE解决这个问题?

如何通过 Eloquent 获取单个集合中每位教师的学生人数

使用命令行界面停止 laravel 服务器

集成测试模拟外观与注入模拟

Laravel 5 控制台( artisan )命令单元测试

Laravel 5在blade中 echo 包含html的会话变量

Laravel 4 如何监听模型事件?

将 Laravel Socialite 与 API 一起使用?

Laravel 5.1 重命名项目

Laravel 中的填充方法不起作用?

如何使用命令行手动运行 laravel/lumen 作业(job)

如何仅在Blade模板存在时才包含它?

Laravel League/flysystem 使用 AWS S3 获取文件 URL

Laravel 检测手机/平板电脑并加载正确的视图

使用 Queue::fake() 测试监听器

Laravel 4 简单路由无法使用 mod_rewrite 和 .htaccess

将值插入隐藏输入 Laravel Blade

在 Laravel 中翻译特定语言

Laravel - Union + 分页?