【问题标题】:Validating fields as unique in cakephp 3.0在 cakephp 3.0 中验证字段是唯一的
【发布时间】:2015-07-11 03:21:12
【问题描述】:

你如何验证一个字段在 cakephp 3.0 中是唯一的? API 中似乎没有列出验证函数。

【问题讨论】:

    标签: validation cakephp cakephp-3.0


    【解决方案1】:

    您想使用规则validateUnique。例如,检查UsersTable 上的电子邮件地址是否唯一:-

    public function validationDefault(Validator $validator)
    {
        $validator->add(
            'email', 
            ['unique' => [
                'rule' => 'validateUnique', 
                'provider' => 'table', 
                'message' => 'Not unique']
            ]
        );
    
        return $validator;
    }
    

    详情请见the API docs

    【讨论】:

    • 非常感谢!!!我正在使用 buildRules(RulesChecker $rules) 工作正常但没有给出正确的错误消息
    • 发现在编辑期间无法正常工作的问题。你能帮忙吗?
    【解决方案2】:

    你必须在你的桌子上使用 cake 的 ORM 中的规则...

    在命名空间之后的用户表顶部添加它

    use Cake\ORM\Rule\IsUnique;
    

    然后通过将规则放在公共函数中来准备您的规则以应用于您的领域

    public function buildRules(RulesChecker $rules){
            $rules->add($rules->isUnique(['email']));
            return $rules;
        }
    

    有关RULES的更多信息,请参阅 cakephp 文档

    【讨论】:

    • 如何显示自定义消息而不是 Provided value is invalid 用于唯一字段?
    • 我纠正自己,isUnique 只有 2 个参数,public function isUnique(array $fields, $message = null){ 所以你的代码会像:$rules->add($rules->isUnique(['email'],'Your message here!'));
    【解决方案3】:

    验证提供者可以是对象或类名。如果使用类名,则方法必须是静态的。要使用“默认”以外的提供程序,请务必在规则中设置 provider 键:

    // Use a rule from the table provider
    $validator->add('title', 'unique', [
        'rule' => 'uniqueTitle',
        'provider' => 'table'
    ]);
    

    有关更多详细信息,请查看 CakePHP3 参考书中的Adding Validation Providers 部分。

    【讨论】:

    【解决方案4】:

    使用manual 中描述的应用程序规则。

    【讨论】:

    • ADMad 提供的链接是一个极好的并且可能是最好的解决方案。在 Table 的 buildRules 函数中,添加一条规则:$rules->add($rules->isUnique(['UNIQUE_COLUMN']));
    【解决方案5】:

    请检查此在 cakephp 3.8 中的唯一验证 go to site

    public function validationDefault(Validator $validator)
    {
        $validator->requirePresence('login_id');
        return $validator;
    }
    
    public function buildRules(RulesChecker $rules)
    {
        $rules->add($rules->isUnique(['login_id'], 'User already exist.'));
        return $rules;  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 2011-08-07
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      相关资源
      最近更新 更多