Добавление пользовательского класса в элементы управления при рендеринге для форм 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 - хороший пример.