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

时间:2014-01-21 03:18:57

标签: zend-framework2 zend-form

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

这是捕获:它只能在标签具有“内联”类时执行此操作。现在,我知道我可以使用以下代码来执行此操作:

$this->add(array (
    'name' -> 'name',
    ....
    'options' => array (
        'label' => 'Name',
        'label_attributes' => array (
            'class' => 'inline'
        )
    )
));

这样可以正常工作,如果必须逐项完成,那就这样吧。但我想知道是否有一些方法可以在不使用JavaScript的情况下将类添加到与文本和文本区域表单元素相关联的所有标签。我想这可以通过插件完成,也可以循环遍历表单中的所有元素,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

您可以扩展FormRow视图助手。

这是一个小例子:

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')); ?>