【问题标题】:Multiple ignore-fields for is_unique-functionis_unique-function 的多个忽略字段
【发布时间】:2021-02-10 23:54:23
【问题描述】:

我在使用 Codeigniter 4 验证规则时遇到了一些问题。我在规则集中使用 is_unique 函数,以便从验证中排除一行。

这里的问题是表中有两个字段需要检查:

'episodeTitle' => [
                    'label' => 'episodeTitle',
                    'rules' => 'required|max_length[100]|is_unique[episodes.episodeTitle,episodes.episodeID,' . $episodeID . ',episodes.podcastID,' . $podcastID . ']',
                    'errors' => [
                        'required' => lang('Errors.nested.episode.episodeTitleRequired'),
                        'max_length' => lang('Errors.nested.messages.maxLength100'),
                        'is_unique' => lang('Errors.nested.episode.episodeTitleUnique'),
                    ],
                ],

是否可以根据 2 个或更多字段进行例外处理?

我想检查 episodeID 和 podcastID 而不仅仅是这些值之一。

【问题讨论】:

    标签: php codeigniter validation codeigniter-4


    【解决方案1】:

    您需要创建自定义规则来实现您想要的。

    规则存储在简单的命名空间类中。只要自动装载机可以找到它们,它们就可以存储在您想要的任何位置。这些文件称为规则集。要添加新的 RuleSet,请编辑 Config/Validation.php 并将新文件添加到 $ruleSets 数组:

    public $ruleSets = [
        \CodeIgniter\Validation\Rules::class,
        \CodeIgniter\Validation\FileRules::class,
        \CodeIgniter\Validation\CreditCardRules::class,
    ];
    

    在文件本身中,每个方法都是一个规则,并且必须接受一个字符串作为第一个参数,并且必须返回一个布尔值 true 或 false 值,如果它通过了测试,则表示 true;如果没有,则返回 false:

    class MyRules
    {
        public function check_unique(string $str): bool
        {
            // Your code to check the values and don't forget to return true or false.
        }
    }
    

    然后在您的验证中使用 check_unique 规则。

    【讨论】:

    • 嘿,是的,我就是这么想的。我实际上制定了一个 cuatom 规则,它确实有效(万岁!)我将在星期一分享我的解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多