0

我已经按照 Zend Framework 2 的教程进行操作,并且在呈现的表单上看到绑定标签的约定是将输入元素包装在标签标签中,而不是使用“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 标签,但我更喜欢使用标签上的类,然后对 span 和 input 元素使用 css 子选择器

我已经重新阅读了教程以及相应部分的评论,甚至深入研究了 Zend\Form API 文档本身,但我看不到如何在以这种方式声明表单元素时将类属性应用于标签.


表单渲染的另一个小问题是它似乎是内联渲染的,表单元素之间没有换行符。add.phtml我已经通过在视图脚本(和)中添加换行符来解决这个问题,edit.phtml如下所示:

echo $this->formRow($form->get('title')) . "\n";

但是,这似乎与视图中每个回显的表单语句有关,并且使用它formCollection()也会使整个表单输出内联。出于易读性的目的,我希望在查看源代码时至少在适当的地方有换行符(我也希望有适当的缩进,但这似乎是一个艰巨的要求,因为即使 IDE 也经常出错)

那么,对于我遗漏的这些问题中的任何一个,是否有一个内置选项,或者,是否有一种方法来定义工厂或助手?如果我需要编写一个助手,我希望它适用于所有模块。

4

1 回答 1

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";
于 2013-03-28T07:46:43.000 回答