K4:Defining Database, Virtual and Calculated Fields
From In-Portal Developers Guide
m (1 версия) |
|||
Line 1: | Line 1: | ||
{{toc | category = Unit Configs | sortkey = 002.001}} | {{toc | category = Unit Configs | sortkey = 002.001}} | ||
- | + | Usually, each unit config is created to interact with '''one''' database table. For this, each field from the database table must be declared in the unit config. The ''<code>[[#Fields|Fields]]</code>'' option exists for this purpose. This option is an associative array (almost all options in a unit config are associative arrays), in which the keys are the names of the table fields and the values are the options of these fields. This array can, for example, look like this: | |
<source lang="php"> | <source lang="php"> | ||
'Fields' => Array ( | 'Fields' => Array ( | ||
Line 8: | Line 8: | ||
), | ), | ||
</source> | </source> | ||
- | + | From the above example it's not difficult to see that ''<code>ProductId</code>'', ''<code>Name</code>'' and ''<code>Description</code>'' are fields, and the contents of the arrays are the sets of options for these fields. Fields options are divided into 3 groups: | |
- | * ''' | + | * '''required''' - must always be there; |
- | * ''' | + | * '''validation''' - used to validate field values against the restrictions on the field values; |
- | * ''' | + | * '''formatter''' - used by the indicated [[K4:Formatters|formatter]]. |
- | + | == Required Options == | |
- | == | + | |
{| class="prettytable" | {| class="prettytable" | ||
- | ! | + | ! Option Name || Option Description |
|- | |- | ||
- | | {{ConfigProperty|type|string}} || | + | | {{ConfigProperty|type|string}} || Indicates the type of value that's going to be stored in the field. For all numerical types, it's automatically checked that the field value is a number. If this field has something else, for example a String, then at the validation stage this field will contain an error. The following values are available for this option: |
- | * '''int''' - | + | * '''int''' - whole number (e.g. 543); |
- | * '''float''' - | + | * '''float''' - floating point number (e.g. 14.66); |
- | * '''string''' - | + | * '''string''' - line of text (e.g. 'validate'). |
- | ''''' | + | '''''Deprecated Types (Don't Use):''''' |
- | * '''integer''' - | + | * '''integer''' - synonym ''int''; |
- | * '''double''' - | + | * '''double''' - synonym ''float''; |
- | * '''real''' - | + | * '''real''' - synonym ''float''; |
- | * '''numeric''' - | + | * '''numeric''' - synonym ''float''. |
|- | |- | ||
- | | {{ConfigProperty|default|mixed}} || | + | | {{ConfigProperty|default|mixed}} || Default field value. '''Must correspond''' to the default value of this field in the database. If it's physically impossible (database restriction) to synchronize default values in options and in the database field, then this doesn't have to be done. For example, when using [[K4:Formatters#kDateFormatter|kDateFormatter]] it's allowed to put ''<code>'#NOW#'</code>'' as the default value, but the database field with the date is numeric (since it's a timestamp) and such a value can't be stored in the database. |
|} | |} | ||
Revision as of 21:37, 19 April 2009
| ||
---|---|---|
Статьи в этой категории | ||
|
Usually, each unit config is created to interact with one database table. For this, each field from the database table must be declared in the unit config. The Fields
option exists for this purpose. This option is an associative array (almost all options in a unit config are associative arrays), in which the keys are the names of the table fields and the values are the options of these fields. This array can, for example, look like this:
'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), ),
From the above example it's not difficult to see that ProductId
, Name
and Description
are fields, and the contents of the arrays are the sets of options for these fields. Fields options are divided into 3 groups:
- required - must always be there;
- validation - used to validate field values against the restrictions on the field values;
- formatter - used by the indicated formatter.
Contents |
Required Options
Option Name | Option Description |
---|---|
type (string) | Indicates the type of value that's going to be stored in the field. For all numerical types, it's automatically checked that the field value is a number. If this field has something else, for example a String, then at the validation stage this field will contain an error. The following values are available for this option:
|
default (mixed) | Default field value. Must correspond to the default value of this field in the database. If it's physically impossible (database restriction) to synchronize default values in options and in the database field, then this doesn't have to be done. For example, when using kDateFormatter it's allowed to put '#NOW#' as the default value, but the database field with the date is numeric (since it's a timestamp) and such a value can't be stored in the database.
|
Необязательные опции
название опции | описание опции |
---|---|
not_null (int) | Если поле в базе данных настроено, как "NOT NULL ", то надо указывать данную опцию.
|
Опции проверки соответствия
название опции | описание опции |
---|---|
error_field (string) | Название поля, в которое должны писаться ошибки проверок вместо этого поля. Бывает полезно, когда ошибки от нескольких виртуальных полей должны показываться у одного реально поля. |
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, указанный в качестве значения, должен вызывать ошибку можно дополнительно указать опции ограничения интервала значения, напр. 'min_value_exc' => 0 .
|
Все выше описанные опции можно объединить в группы по смыслу:
- интервалы (
max_value_inc
,min_value_inc
,max_value_exc
,min_value_exc
) - опции, использующиеся для проверки принадлежности значения поля указанному интервалу (range); - длинна (
max_len
,min_len
) - опции, использующиеся для проверки длинны строки (length).
Если та, или иная опция не нужна, то можно просто убрать её определение из массива опций поля. В таком случае не надо будет ставить её значение в 0 или false .
|
Сообщения об ошибках
У каждого поля можно указать альтернативные тексты для всех ошибок используя опцию error_msgs
(array). Ниже приведена таблица, в которой описаны все стандартные ошибки:
pseudo | описание | значение по умолчанию | управляется опциями |
---|---|---|---|
required | Значение в поле не заполнено. | !la_err_required! | required |
unique | Значение в поле не уникально. | !la_err_unique! | unique |
value_out_of_range | Значение в поле не находиться в разрешённом интервале значений | !la_err_value_out_of_range! | max_value_inc, min_value_inc, max_value_exc, min_value_exc |
length_out_of_range | Длинна строки превышена. | !la_err_length_out_of_range! | max_len, min_len |
bad_type | Тип значения в поле не соответствует описанию поля (напр. ввели букву вместо числа). | !la_err_bad_type! | type |
invalid_format | Формат строки не соответствует требуемому. | !la_err_invalid_format! | regexp |
bad_date_format | Формат введённой даты не соответствует требуемому. | !la_err_bad_date_format! | опции kDateFormatter |
primary_lang_required | Значение в поле на первичном (primary) языке не заполнено. | !la_err_primary_lang_required! | required, опции kMultiLanguage |
bad_file_format | Попытка загрузить файл, у которого миме-тип (mime-type ) не находиться в списке разрешённых. | !la_error_InvalidFileFormat! | allowed_types, опции kUploadFormatter |
bad_file_size | Попытка загрузить файла, размер которого превышает разрешённый. | !la_error_FileTooLarge! | max_size, опции kUploadFormatter |
cant_save_file | Загруженный на сервер файл неудалось сохранить в требуемую директорию. | !la_error_cant_save_file! | upload_dir, опции kUploadFormatter |
Эта опция задаётся в виде ассоциативного одномерного массива, в ключах которого указаны "pseudo
" ошибок (см. приведённую выше таблицу), а в значениях соответствующие им тексты ошибок:
'error_msgs' => Array ( 'required' => '!la_error_CustomRequiredError!' )
Если требуется чтобы перевод фразы стал текстом сообщения об ошибке, то нужно заключить её название в восклицательные знаки:
- "
!la_error_ErrorPhrase!
" - фраза (её перевод на текущем языке это текст ошибка); - "
Error Message
" - текст (будет один для всех языков).
Опции форматера
Все оставшиеся опции обрабатываются указанным форматером. Вот, к примеру некоторые из них:
название опции | описание опции |
---|---|
formatter (string) | Название класса накладываемого форматера. Вот самые ходовые классы:
Подробнее о том, какие есть форматеры и как их использовать можно прочесть в этой статье. |
Автоматическое построение структуры
В 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).
Функциональность доступна начиная с Core v 4.1.0.