3.2.3. Описание полей таблицы
Обычно каждый unit config создаётся для взаимодействия с одной таблицей в базе данных. Для этого в нём необходимо объявить каждое поле из связанной таблицы в базе данных. Для этого существует опция Fields. Эта опция является ассоциативным массивом (почти все опции в unit config это ассоциативные массивы) , в котором ключи это названия полей в таблице, а значения это опции этих полей. Это массив может быть например таким:
'Fields' => Array (
'ProductId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'Name' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'required' => 1, 'max_len' => 255, 'default' => ''),
'Description' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'default' => NULL),
),
Из приведённого примера несложно заметить, что ProductId, Name и Description это поля,
а содержание остальных массивов это набор опций этих полей. Опции поля делятся на 3 группы:
обязательные - должны всегда присутствовать;
проверки соответствия (validation) - используются при проверки соответствия значения в поле с наложенными ограничениями на значение в поле;
форматера - используются указанным форматером.
Обязательные опции
название опции |
описание опции |
|---|---|
| type (string) | Указывает тип значения, которое будет храниться в поле. Для всех численных типов автоматически проверяется, что значение в поле является числом. Если в таком поле будет не число, а например, строка, то на этапе проверки соответствия (validation) в этом поле будет ошибка. Доступны следующие значения этой опции:
Устаревшие типы (не использовать):
|
| default (mixed) | Значение по умолчанию в этом поле. Должно совпадать со значением по умолчанию
у этого поля в базе данных. Если физически не возможно (ограничения в базе данных)
синхронизировать значение по умолчанию в базе данных и в опциях поля, то этого делать
не надо. Например, при использовании kDateFormatter можно ставить
|
Необязательные опции
название опции |
описание опции |
|---|---|
| not_null (int) | Если поле в базе данных настроено, как |
| totals (string) | Название агрегатной функции базы данных (напр. |
Опции проверки соответствия
название опции |
описание опции |
|---|---|
| error_field (string) | Название поля, в которое должны писаться ошибки проверок вместо этого поля. Бывает полезно, когда ошибки от нескольких виртуальных полей должны показываться у одного реально поля. |
| error_msgs (array) | См. Сообщения об ошибках. |
| max_value_inc (int, float) | Максимальное значение (включая это значение), которое может быть в этом поле. Только для числовых полей. |
| min_value_inc (int, float) | Минимальное значение (включая это значение), которое может быть в этом поле. Только для числовых полей. |
| max_value_exc (int, float) | Максимальное значение (не включая это значение), которое может быть в этом поле. Только для числовых полей. |
| min_value_exc (int, float) | Минимальное значение (не включая это значение), которое может быть в этом поле. Только для числовых полей. |
| max_len (int) | Максимальная длинна строки, которая может быть в этом поле. Только для строковых полей. |
| min_len (int) | Минимальная длинна строки, которая может быть в этом поле. Только для строковых полей. |
| unique (array) | Осуществлять проверку на уникальность значения поля в таблице. Если надо проверить уникальность в сочетании со значениями из других полей, то их надо перечислить в виде массива. Если этого делать не надо (т.е. проверяем это поле само по себе), то надо указать пустой массив. Не надо перечислять в массиве поле, у которого указанна данная опция. |
| current_table_only (boolean) | Проверять уникальность значения в поле только из текущей таблицы (live или временной). По умолчанию проверяется из live таблицы и из временной (если доступна). |
| required (int, boolean) | Поле обязательно к заполнению. Если значение не указано, то в поле будет
ошибка. Несмотря на ошибочное мнение ноль, в качестве значения поля
не вызывает ошибку о том, что в поле не указано значение. Но если 0,
указанный в качестве значения, должен вызывать ошибку можно дополнительно
указать опции ограничения интервала значения, напр. |
Все выше описанные опции можно объединить в группы по смыслу:
интервалы (
max_value_inc,min_value_inc,max_value_exc,min_value_exc) - опции, использующиеся для проверки принадлежности значения поля указанному интервалу (range);длинна (
max_len,min_len) - опции, использующиеся для проверки длинны строки (length).
Примечание
Если та, или иная опция не нужна, то можно просто убрать её определение из массива опций поля.
В таком случае не надо будет ставить её значение в 0 или false.
Сообщения об ошибках
У каждого поля можно указать альтернативные тексты для всех ошибок используя опцию «error_msgs». Ниже приведена таблица, в которой описаны все стандартные ошибки:
pseudo |
описание |
значение по умолчанию |
управляется опциями |
|---|---|---|---|
|
Значение в поле не заполнено. |
|
|
|
Значение в поле не уникально. |
|
|
|
Значение в поле не находиться в разрешённом интервале значений |
|
|
|
Длинна строки превышена. |
|
|
|
Тип значения в поле не соответствует описанию поля (напр. ввели букву вместо числа). |
|
|
|
Формат строки не соответствует требуемому. |
|
|
|
Формат введённой даты не соответствует требуемому. |
|
|
|
Значение в поле на первичном (primary) языке не заполнено. |
|
|
|
Попытка загрузить файл, у которого миме-тип
( |
|
|
|
Попытка загрузить файла, размер которого превышает разрешённый. |
|
|
|
Загруженный на сервер файл не удалось сохранить в требуемую директорию. |
|
Эта опция задаётся в виде ассоциативного одномерного массива, в ключах которого указаны pseudo ошибок
(см. приведённую выше таблицу), а в значениях соответствующие им тексты ошибок:
'error_msgs' => Array (
'required' => '!la_error_CustomRequiredError!'
)
Если требуется чтобы перевод фразы стал текстом сообщения об ошибке, то нужно заключить её название в восклицательные знаки:
!la_error_ErrorPhrase!- фраза (её перевод на текущем языке это текст ошибка);Error Message- текст (будет один для всех языков).
Опции форматера
Все оставшиеся опции обрабатываются указанным форматером. Вот, к примеру некоторые из них:
название опции |
описание опции |
|---|---|
| formatter (string) | Название класса накладываемого форматера. Вот самые ходовые классы:
Подробнее о том, какие есть форматеры и как их использовать можно прочесть в этой статье. |
Автоматическое построение структуры
Добавлено в версии 4.1.0.
В K4 есть механизм, который автоматически выстраивает массив для опции Fields. Чтобы воспользоваться им следуйте приведённым шагам:
пойти в секцию «Configuration -> System Tools» (в Platform) или «Tools -> System Tools» (в In-Portal);
в поле «Table Structure» вписать имя таблицы (можно без TABLE_PREFIX) или префикс от unit config;
нажать на кнопку «Go»;
откроется новое окно со структурой введённой таблицы:
Автоматически построенная структура таблицы
Предупреждение
При добавлении новых полей в таблицу нужно повторить все выше описанные шаги, но из результата скопировать описание только нужных полей, а не всех как обычно. Не надо писать всё руками.
При построении структуры полям автоматически прописываются (если удаётся определить) следующие опции:
type- php тип значения, которое будет храниться в поле;not_null- NULL или NOT NULL пометка;default- значение по умолчанию;formatter- класс форматера, пока только для дробный полей (float, double, decimal);max_len- ограничение по длине значения в поле, только для строковых полей (varchar).