在CakePHP 3.0中验证字段的唯一性

7
如何在CakePHP 3.0中验证字段的唯一性?在API中似乎没有列出验证函数。
5个回答

20

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

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

    return $validator;
}

详情请参阅API文档


非常感谢!我一直在使用buildRules(RulesChecker $rules),虽然它能正常工作,但无法提供正确的错误信息。 - pkk
在编辑时发现了一个问题无法工作。你能帮忙吗? - pkk

6

您需要在您的表中使用Cake的ORM规则...

在您的命名空间后面将以下内容添加到您的UsersTable顶部

use Cake\ORM\Rule\IsUnique;

然后,通过将规则放置在公共函数中来准备应用于您的字段。
public function buildRules(RulesChecker $rules){
        $rules->add($rules->isUnique(['email']));
        return $rules;
    }

请参阅cakephp文档,了解有关规则的更多信息。


如何在唯一字段中显示自定义消息而不是“提供的值无效”? - Anuj TBE
我纠正一下,isUnique只有两个参数, public function isUnique(array $fields, $message = null){ 所以你的代码应该是这样的: $rules->add($rules->isUnique(['email'],'在此输入您的消息!')); - Rod

3

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

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

欲了解更多细节,请查看CakePHP3参考书中添加验证提供程序部分。


好的参考资料 点击这里 CakePHP _validateUnique - Marwan Salim

0

请按照手册中所述的应用程序规则进行操作。


ADMad提供的链接是一个非常出色且可能是最佳的解决方案。在您的表的_buildRules_函数中,添加一个规则:$rules->add($rules->isUnique(['UNIQUE_COLUMN'])); - Stephan

0
请检查一下CakePHP 3.8中的唯一验证,谢谢。 前往网站
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;  
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接