如何在 Zend Form 中控制单个表单元素呈现


How to control individual form element rendering in Zend Form?

简介

我正在使用Zend Form库。 我希望能够设计或控制无线电盒的构造方式。 目前,元素的呈现是"在一行中"。 但是,我想做的是将每个选项呈现在自己的行上。 库似乎没有提供简单的注入,即 <br>标签,这是我通常在HTML中使用的。 无论如何,我需要帮助弄清楚如何根据我的需求弯曲库。

控制器

    use Zend'Form'Element;
    use Zend'Form'Form;
    $radio = new Element'Radio('gender');
    $radio->setValueOptions(array(
        '1' => 'Male',
        '2' => 'Female',
        '3' => 'Other',            
    ));
    $radio->setValue(2);

在视图中

<?=$this->formRadio($this->form->get('gender'));?>

观察呈现为

* Male * Female * Other

想要元素呈现为

* Male
* Female
* Other

如何?

示例 HTML 呈现

<form class='my-form'>
    <table>
        <tr>
            <td>
                <label><input name="gender" type="radio" value="1">Male</label> 
                <label><input name="gender" type="radio" value="2">Female</label>
            </td>
        </tr>
    </table>
</form>

你可以完全避开Zend Framework,通过使用CSS来解决这个问题,从而节省一些页面权重(不使用br标签)。

只需查看用于呈现列表项的重复元素的标记或类名(听起来像是无线电输入),并将其样式设置为垂直显示而不是水平显示。

举个例子:

.my-form input[type="radio"] {
    display: block;
}

这将比Zend中的自定义渲染装饰器更快,更简单。

编辑:现在您已经提供了确切的HTML,这里有一些改进。

1) 输入嵌套在标签中,因此您将修改标签的显示而不是输入。

.my-form label {
    display: block;
}

2) 呈现的表单(如果这是确切的)当前没有类名。如果表单永远不会在页面上多次使用,则当前 ID 就可以了,您必须更改 CSS 中的选择器以使用 ID 表示法。

#myform label而不是.my-form label

否则,你可以使用 Zend 的 setAttribute 函数像这样添加一个类名。

$form -> setAttribute('class', 'my-form');