Проверка поля на уникальность

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 11 мая 2016 в 09:19
Привет.

Пишу компонент, и мне нужно чтобы при добавлении данных через форму проводилась проверка на уникальность, как в компоненты Контент

Подскажите, как это сделать?

Перерыл интернет и форум ничего не нашел!
#3 11 мая 2016 в 09:49


github.com/instantsoft/icms2/blob/master/system/controllers/users/backend/forms/form_field.php#L17

Loadырь

Добавил к своему полю

  1. $do == 'add' ? array('unique_field') : false
Передал в форму параметр do

При добавлении ошибка
  1. Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'service' does not have a method 'validate_unique_field' in Z:\home\localhost\www\system\core\action.php on line 29
Добавил во фронтенд код:

  1.  
  2. public function validate_unique_field($value){
  3. $core = cmsCore::getInstance();
  4. $table_name = 'my_table';
  5. return !$core->db->isFieldExists($table_name, $value);
  6. }
  7.  
Без результатно. Что не так я понял?
#4 11 мая 2016 в 10:02
При добавлении поля в форму нужно задать правило проверки на уникальность примерно так:
  1. new fieldString('имя_поля_в_форме', array(
  2. 'title' => 'Title',
  3. 'rules' => array(
  4. array('unique', '{имя_таблицы_без_префикса}', 'имя_поля_в_таблице')
  5. )
  6. )),
-------
Если нужно иметь две разные проверки, например, для добавления и редактирования, то можно дополнительно использовать проверку на уникальность с исключением редактируемого значения:
  1. new fieldString('имя_поля_в_форме', array(
  2. 'title' => 'Title',
  3. 'rules' => array(
  4. $do=='add' ? array('unique', '{имя_таблицы_без_префикса}', 'имя_поля_в_таблице') : array('unique_exclude', '{имя_таблицы_без_префикса}', 'имя_поля_в_таблице', $значение_в_этом_поле_для_исключения)
  5. )
  6. )),
А в форму передавать два значения — действие и значение для исключения (если нужно):
  1.  
  2. public function init($do, $id=0) {
  3. ... описание формы
  4. }
#5 11 мая 2016 в 10:05

Без результатно. Что не так я понял?

Вадим Нарочный
а что в логах пишет?
'my_table' — это без префикса?
#6 11 мая 2016 в 10:08


При добавлении поля в форму нужно задать правило проверки на уникальность примерно так:

  1. new fieldString('имя_поля_в_форме', array(
  2. 'title' => 'Title',
  3. 'rules' => array(
  4. array('unique', '{имя_таблицы_без_префикса}', 'имя_поля_в_таблице')
  5. )
  6. )),

WebMan

Спасибо, всё работает!
#7 11 мая 2016 в 10:09


Без результатно. Что не так я понял?

Вадим Нарочный
а что в логах пишет?
'my_table' — это без префикса?

Loadырь

И вам спасибо!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.