Добавление пользовательского класса в элементы управления при рендеринге для форм Nette

Я использую этот пример примера Bootstrap3 для рендеринга формы, и мне было интересно, можно ли было добавить пользовательские имена классов для формирования оболочки ввода на основе типа элемента управления. Я попробовал следующее, но это относится к входным данным формы, а не к окружающим div-элементам-оберткам (в данном случае form-group):

foreach ($form->getControls() as $control) {
    $type = $control->getOption('type');
    $control->getControlPrototype()->addClass('form-' . $control->getControlPrototype()->type);
}

1 ответ

Решение

Оболочка ввода не относится к элементу управления (входу), а к средству визуализации. DefaultFormRenderer оборачивает контроль в renderPair метод - другие рендеры не должны даже делать обтекания. По этой причине вы не можете получить прототип обертки.

Ты можешь использовать $control->setOption('class', …) хотя и DefaultFormRenderer будет использовать его в качестве класса для оболочки (как вы можете видеть в источнике DefaultFormRenderer::renderPair).

Вместо того, чтобы манипулировать формой напрямую, гораздо проще реализовать пользовательский IFormRenderer как @hrach упоминает выше. Его Bs3FormRenderer - хороший пример.

Другие вопросы по тегам