在 Nette Forms 渲染期间在控件上添加自定义 Class
Add Custom Class on Controls during rendering for Nette Forms
我正在使用此示例 Bootstrap3 example 呈现表单,想知道是否可以添加自定义类名以基于控件类型形成输入包装器。我尝试了以下但它适用于表单输入而不是周围的包装 div(在这种情况下为表单组):
foreach ($form->getControls() as $control) {
$type = $control->getOption('type');
$control->getControlPrototype()->addClass('form-' . $control->getControlPrototype()->type);
}
输入包装器不是 Control(输入)的问题,而是 Renderer 的问题。 DefaultFormRenderer
将控件包装在 renderPair
方法中——其他渲染器甚至不必进行任何包装。因此,您无法获得包装器的原型。
不过,您可以使用 $control->setOption('class', …)
,DefaultFormRenderer
会将其用作包装器的 class(如您在 DefaultFormRenderer::renderPair
的源代码中所见) .
与其直接操作表单,不如实现自定义的更简洁IFormRenderer
as @hrach mentions above. His Bs3FormRenderer是一个很好的例子。
我正在使用此示例 Bootstrap3 example 呈现表单,想知道是否可以添加自定义类名以基于控件类型形成输入包装器。我尝试了以下但它适用于表单输入而不是周围的包装 div(在这种情况下为表单组):
foreach ($form->getControls() as $control) {
$type = $control->getOption('type');
$control->getControlPrototype()->addClass('form-' . $control->getControlPrototype()->type);
}
输入包装器不是 Control(输入)的问题,而是 Renderer 的问题。 DefaultFormRenderer
将控件包装在 renderPair
方法中——其他渲染器甚至不必进行任何包装。因此,您无法获得包装器的原型。
不过,您可以使用 $control->setOption('class', …)
,DefaultFormRenderer
会将其用作包装器的 class(如您在 DefaultFormRenderer::renderPair
的源代码中所见) .
与其直接操作表单,不如实现自定义的更简洁IFormRenderer
as @hrach mentions above. His Bs3FormRenderer是一个很好的例子。