Alterator/module/types: различия между версиями
(Новая: === Типы параметров === Иногда необходимо производить валидацию введённых пользователем данных. Можно ...) |
|||
Строка 25: | Строка 25: | ||
В примере выше объявлено что параметр 'a' будет иметь тип 'IP адрес', 'b' - 'TCP порт' и теперь пользователь не сможет передать в бакенд в качестве 'a' что-либо отличное IP адреса и в качестве 'b' что-либо отличное от целого числа находящегося в определённом диапазоне. | В примере выше объявлено что параметр 'a' будет иметь тип 'IP адрес', 'b' - 'TCP порт' и теперь пользователь не сможет передать в бакенд в качестве 'a' что-либо отличное IP адреса и в качестве 'b' что-либо отличное от целого числа находящегося в определённом диапазоне. | ||
==== Изменения в интерфейсе ==== | |||
На этом возможности системы типов не исчерпываются. Предположим, что пользователь ввёл-таки неправильное значение в поле, соотвествующее параметру 'a'. Он увидит следующее сообщение об ошибке: | |||
<pre> | |||
a: недопустимый IP-адрес | |||
</pre> | |||
Однако никакого 'a' на его экране не наблюдается. В каком именно поле случилась ошибка? | |||
Система типов alterator в состоянии справиться с этим. Для этого всего-лишь необходимо, чтобы у '''названия поля''' был задан атрибут 'name' содержащий '''имя параметра бакенда''', которому соответвует это поле. | |||
Пример для qt: | |||
<pre> | |||
... | |||
(label text "Field" name "a") | |||
(edit name "a") | |||
... | |||
</pre> | |||
Теперь в случае ошибки, пользователь увидит следующее сообщение: | |||
<pre> | |||
Field: недопустимы IP-адрес | |||
</pre> | |||
Аналогичный пример для html: | |||
<pre> | |||
.... | |||
<span name="a" translate="_">Field:</span> | |||
<input type="text" name="a"/> | |||
... | |||
</pre> |
Версия от 16:49, 24 октября 2008
Типы параметров
Иногда необходимо производить валидацию введённых пользователем данных. Можно это делать в бакенде, но гораздо удобнее назначить параметрам типы. В этом случае проверка будет происходить автоматически до передачи данных в бакенд.
Изменения в бакенде
Делается это следующим образом. В бакенде добавляется ответ на запрос типа "type". В ответе перечисляются параметры, с которыми работает бакенд, и их типы. Для формирования правильного ответа стоит воспользоваться стандартной библиотекой, например для бакенда на shell объявление типов будет выглядить следующим образом.
. alterator-sh-functions on_message() { case "$in_action" in type) write_type_item a ipv4-address write_type_item b tcp-port ;; read) ... esac }
В примере выше объявлено что параметр 'a' будет иметь тип 'IP адрес', 'b' - 'TCP порт' и теперь пользователь не сможет передать в бакенд в качестве 'a' что-либо отличное IP адреса и в качестве 'b' что-либо отличное от целого числа находящегося в определённом диапазоне.
Изменения в интерфейсе
На этом возможности системы типов не исчерпываются. Предположим, что пользователь ввёл-таки неправильное значение в поле, соотвествующее параметру 'a'. Он увидит следующее сообщение об ошибке:
a: недопустимый IP-адрес
Однако никакого 'a' на его экране не наблюдается. В каком именно поле случилась ошибка?
Система типов alterator в состоянии справиться с этим. Для этого всего-лишь необходимо, чтобы у названия поля был задан атрибут 'name' содержащий имя параметра бакенда, которому соответвует это поле.
Пример для qt:
... (label text "Field" name "a") (edit name "a") ...
Теперь в случае ошибки, пользователь увидит следующее сообщение:
Field: недопустимы IP-адрес
Аналогичный пример для html:
.... <span name="a" translate="_">Field:</span> <input type="text" name="a"/> ...