我已经按照Zend Framework 2的教程进行操作,我在渲染表单上看到,绑定标签的约定是将input元素包装在label标签中,而不是使用'for'属性。虽然本教程没有涵盖它,但我(正确地)推断出属性数组允许在输入元素本身上设置一个类,但我真正想要做的是将一个类应用到定义的标签上在选项下。
以下是本教程中使用的示例(来自AlbumForm.php
):
$this->add(array(
'name' => 'title',
'attributes' => array(
'class' => 'required', // <- I added this
'type' => 'text',
),
'options' => array(
'label' => 'Title',
),
));
这将呈现为:
<label><span>Title</span><input name="title" class="required" type="text" value=""></label>
或者,我可以将类应用于span标记,但我更喜欢在标签上使用类,然后使用css子选择器作为span和input元素
我已经重新阅读了教程以及相应部分的注释,甚至深入研究了Zend \ Form API文档本身,我没有看到如何在声明表单元素时将类属性应用于标签以这种方式。
另一个带有表单渲染的小挑剔是它看起来是内联呈现的,表单元素之间没有换行符。我通过在视图脚本(add.phtml
和edit.phtml
)中添加换行符来解决这个问题,如下所示:
echo $this->formRow($form->get('title')) . "\n";
然而,与视图中的每个回显表单语句有关并且使用formCollection()
同样呈现内联的整个表单输出似乎很痛苦。出于易读性的目的,我希望在查看源代码时至少有适当的换行符(我也希望适当的缩进,但这似乎是一个很高的顺序,因为即使IDE在大多数情况下都会出错)
那么,我是否缺少这些问题的内置选项,或者是一种定义工厂或帮助器的方法?如果我需要编写帮助程序,我希望它适用于所有模块。
答案 0 :(得分:6)
要在标签中添加类,请使用配置中的“label_attributes”键:
$this->add(array(
'name' => 'title',
'attributes' => array(
'type' => 'text',
),
'options' => array(
'label' => 'Title',
'label_attributes' => array(
'class' => 'required',
),
),
));
要添加新行,您可以编写自己的FormRow
视图助手,也可以在视图脚本中单独渲染标签和元素,如下所示:
$form = $this->form;
$form->prepare();
echo $this->form()->openTag($form) . "\n";
echo $this->formLabel($form->get('title')) . "\n";
echo $this->formInput($form->get('title')) . "\n";
echo $this->formElementErrors($form->get('title'));
// other elements
echo $this->form()->closeTag($form) . "\n";