Zend framework2 如何将类添加到ZF2表单中的所有标签

Zend framework2 如何将类添加到ZF2表单中的所有标签,zend-framework2,zend-form,Zend Framework2,Zend Form,我正在使用一个jQuery插件,它从与表单元素关联的标签中获取文本,并将它们作为字段本身的默认文本。(您可以找到插件。) 这里有一个陷阱:只有当标签具有类“inline”时,它才能这样做。现在,我知道我可以使用以下代码来执行此操作: $this->add(array ( 'name' -> 'name', .... 'options' => array ( 'label' => 'Name', 'label_attr

我正在使用一个jQuery插件,它从与表单元素关联的标签中获取文本,并将它们作为字段本身的默认文本。(您可以找到插件。)

这里有一个陷阱:只有当标签具有类“inline”时,它才能这样做。现在,我知道我可以使用以下代码来执行此操作:

$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,并且在使用新版本方面仍然是新手?)