Примеры Form¶
Практические сценарии для Form (FormSchemaBuilder, FormSectionBuilder, FormFieldBuilder). Справочник по каждому классу — в разделе I18n / Twig / Form (FormSchemaBuilder.md, FormSectionBuilder.md, FormFieldBuilder.md).
Два разных контракта¶
FormSchemaBuilder используется в двух ролях, которые важно не путать:
| Файл | Возвращает | Кто гидрирует |
|---|---|---|
settings.schema.php | FormSchema напрямую — результат ->build() | SettingsFormService рендерит объект как есть |
*.filter.schema.php | обычный PHP array (sections/sort) | FilterSchema::fromArray() гидрирует массив в FilterSchema |
То есть settings.schema.php сразу возвращает готовый объект FormSchema (можно использовать весь fluent-API FormSchemaBuilder), а *.filter.schema.php — плоский массив в форме, которую понимает FilterSchema::fromArray() (можно писать и через builder + ->build()->toArray(), и просто array-литералом — на практике используется array-литерал, см. ниже).
Layout: stack (по умолчанию)¶
| PHP | |
|---|---|
Секции выводятся вертикальным стеком — layout() можно не указывать, FormLayout::STACK — значение по умолчанию.
Layout: tabs¶
Каждый ->section(...) после первого автоматически фиксирует предыдущую секцию и открывает вкладку с новым заголовком (см. живой пример: Admin/settings.schema.php).
Layout: accordion¶
Секции сворачиваются в аккордеон Metro UI — удобно для длинных форм с редко используемыми блоками.
Все типы полей¶
text/number/textarea— простые поля ввода;numberобычно комбинируют с->filter(FILTER_VALIDATE_INT)для приведения типов при сохранении.select— одиночный выбор изoptions();multi— множественный выбор (в фильтрах рендерится как чекбокс-список с несколькими значениями в URL).checkbox— булево значение,->default(bool).hidden— служебное поле без видимого label (например,modдля форм, где нужно явно передать контекст).->columns(int)— ширина поля в колонках сетки Metro (1–12),->metro([...])— произвольные data-атрибуты Metro UI.
Filter schema: полный пример с sort/db_column/range/daterange¶
*.filter.schema.php — простой array-контракт, гидрируемый FilterSchema::fromArray(). Реальный пример из Admin/logs.filter.schema.php:
Особенности:
sort.default— колонка сортировки по умолчанию (FilterSchema::$defaultOrder);sort.columns— картаcolumn => label, из которой строится выпадающий список сортировки на списковой странице.type: 'range'— числовой диапазон «от–до» (например,idили любой числовой столбец).type: 'daterange'— диапазон дат с датапикером Metro.type: 'multi'— чекбокс-фильтр с несколькими значениями (filter_rules[N][type]=multi&filter_rules[N][value][]=...в URL).metro.db_column— реальное имя колонки в БД, если оно отличается отidполя (иначеFilterSchema::filterDbColumns()/resolvedSortColumns()используют самid).
Схема загружается и применяется в странице через FilterSchema::fromArray() + FilterFormService: