Zend framework2 如何将类添加到ZF2表单中的所有标签
我正在使用一个jQuery插件,它从与表单元素关联的标签中获取文本,并将它们作为字段本身的默认文本。(您可以找到插件。) 这里有一个陷阱:只有当标签具有类“inline”时,它才能这样做。现在,我知道我可以使用以下代码来执行此操作:Zend framework2 如何将类添加到ZF2表单中的所有标签,zend-framework2,zend-form,Zend Framework2,Zend Form,我正在使用一个jQuery插件,它从与表单元素关联的标签中获取文本,并将它们作为字段本身的默认文本。(您可以找到插件。) 这里有一个陷阱:只有当标签具有类“inline”时,它才能这样做。现在,我知道我可以使用以下代码来执行此操作: $this->add(array ( 'name' -> 'name', .... 'options' => array ( 'label' => 'Name', 'label_attr
$this->add(array (
'name' -> 'name',
....
'options' => array (
'label' => 'Name',
'label_attributes' => array (
'class' => 'inline'
)
)
));
这将很好地工作,如果必须逐项完成,那么就这样做吧。但是我想知道是否有某种方法可以在不使用JavaScript的情况下将类添加到与文本和文本区域表单元素关联的所有标签中。我想这可以通过一个插件来完成,也可以通过循环表单中的所有元素来完成,但我不知道该怎么做。您可以扩展FormRow视图助手
public function getViewHelperConfig() {
return array(
'factories' => array(
'CustomFormRow' => function($sm) {
return new \Application\View\Helper\CustomFormRow;
},
)
);
}
下面是一个小例子:
use Zend\Form\View\Helper\AbstractHelper;
use Zend\Form\View\Helper\FormRow;
class CustomFormRow extends FormRow
{
public function render(ElementInterface $element) {
...
$label = $element->getLabel();
if (isset($label) && '' !== $label) {
// Translate the label
if (null !== ($translator = $this->getTranslator())) {
$label = $translator->translate(
$label, $this->getTranslatorTextDomain()
);
}
$label->setAttribute('class', 'inline');
}
...
if ($this->partial) {
$vars = array(
'element' => $element,
'label' => $label,
'labelAttributes' => $this->labelAttributes,
'labelPosition' => $this->labelPosition,
'renderErrors' => $this->renderErrors,
);
return $this->view->render($this->partial, $vars);
}
...
}
您可能会保留其余部分,一旦在Module.php中为视图助手添加了一些配置,就可以继续了
public function getViewHelperConfig() {
return array(
'factories' => array(
'CustomFormRow' => function($sm) {
return new \Application\View\Helper\CustomFormRow;
},
)
);
}
在模板文件中,现在必须改用viewHelper
<?php echo $this->CustomFormRow($form->get('yourelement')); ?>
Heck,它甚至不必精确到只将类添加到文本和textarea元素的标签上,因为插件已经很好地处理了这一点……这是一个非常有趣的答案。这并不是我所期望的,但它确实让我对新框架的工作原理有了很多了解。(我有没有提到我正在从ZF1迁移到ZF2,并且在使用新版本方面仍然是新手?)