2015-07-11 3 views

ответ

13

Вы хотите использовать правило validateUnique. Например, чтобы проверить адрес электронной почты уникален по принципу UsersTable: -

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

    return $validator; 
} 

Подробности можно найти в the API docs.

+0

Большое спасибо !!! Я использовал buildRules (RulesChecker $ rules), который работал нормально, но не дал правильное сообщение об ошибке – pkk

+0

Обнаружена проблема, не работающая во время редактирования. Можете ли вы помочь? – pkk

0

Используйте правила применения, как описано в manual.

+0

Ссылка, предоставленная ADMad, является отличным и, возможно, лучшим решением. В функции _buildRules_ вашей таблицы, добавить правило: '$ на правилах> добавить ($ на правилах> isUnique ([ 'UNIQUE_COLUMN']));' – Stephan

1

Поставщики валидации могут быть объектами или именами классов. Если используется имя класса, методы должны быть статическими. Чтобы использовать поставщик, кроме «по умолчанию», не забудьте установить ключ provider в правиле:

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

Для получения более подробной информации просмотрите раздел в справочнике CakePHP3 Adding Validation Providers.

3

вы должны использовать правила из ОРМА торта на вашем столе ...

добавить это в верхней части UsersTable после имен

use Cake\ORM\Rule\IsUnique; 

Затем подготовить правило применить к полю помещая его в публичной функции

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

Обратитесь к документации CakePHP для получения дополнительной информации о RULES

+0

Это должно быть помечено как правильный ответ! – Andy

+0

Как показать пользовательское сообщение вместо «Предоставленное значение недействительно» для уникальных полей? –

+0

Я исправляю себя, isUnique имеет только 2 параметра, 'public function isUnique (array $ fields, $ message = null) {' , поэтому ваш код будет таким: '$ rules-> add ($ rules-> isUnique (['email'], 'Ваше сообщение здесь!')); ' – Rod

Смежные вопросы