Хотя FormIt может обрабатывать поля любого типа, для селектов, радио и флажков требуются специальные инструкции, в связи с их естественным значением.
Обработка селективных полей
FormIt предоставляет утилитный сниппет, называемый FormItIsSelected, который может использоваться в качестве Output Filter для обработки selected="selected" части опции.
Пример:
<select name="color">
<option value="blue"
[[!+fi.color:FormItIsSelected=`blue`]]
>Blue</option>
<option value="red"
[[!+fi.color:FormItIsSelected=`red`]]
>Red</option>
<option value="green"
[[!+fi.color:FormItIsSelected=`green`]]
>Green</option>
<!-- This would also work -->
<option value="yellow"
[[!+fi.color:is=`yellow`:then=`selected`]]
>Yellow</option>
</select>
Таким образом будет автоматически обрабатываться «selected» часть поля опции, которая проходит валидацию и обработку ошибок.
Обработка флажков и радио
Обработка флажков и радио очень похожа на обработку селектов, с той лишь разницей, как Вы проводите для них валидацию «required». FormIt предоставляет помощь OutputFilter для FormItIsChecked (похожую на FormItIsSelected) для обработки персистентности значения.
В этом примере показана обработка флажков, персистируя их значения:<label>Color:
[[!+fi.error.color]]
</label>
<input type="checkbox" name="color[]" value="blue"
[[!+fi.color:FormItIsChecked=`blue`]]
> Blue
<input type="checkbox" name="color[]" value="red"
[[!+fi.color:FormItIsChecked=`red`]]
> Red
<input type="checkbox" name="color[]" value="green"
[[!+fi.color:FormItIsChecked=`green`]]
> Green
Зпомните, что [] удаляется при установке плейсхолдера «fi.error.color».
Обработка Required в Checkboxes (по флажкам)
Так как HTML не отправляет значение, если флажок не установлен, обработка валидации «required» по флажкам может быть сложнее. Вам нужно будет добавить поле «hidden» перед, так что, по крайней мере, отправляется пустое значение:
[[!FormIt? &validate=`color:required`]]
...
<label>Color: [[!+fi.error.color]]
</label>
<input type="hidden" name="color[]" value="" />
<input type="checkbox" name="color[]" value="blue" [[!+fi.color:FormItIsChecked=`blue`]]
> Blue
<input type="checkbox" name="color[]" value="red" [[!+fi.color:FormItIsChecked=`red`]]
> Red
<input type="checkbox" name="color[]" value="green" [[!+fi.color:FormItIsChecked=`green`]]
> Green
Таким образом проводится успешная проверка, что, по крайней мере, один флажок был выбран при отправке формы.