我正在学习ZF 2.3.1的专辑教程。
在add.phtml
我有以下代码:
$form->setAttribute('action', $this->url('album', array('action' => 'add')));
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formHidden($form->get('id'));
echo $this->formRow($form->get('title'));
echo $this->formRow($form->get('artist'));
echo $this->formSubmit($form->get('submit'));
echo $this->form()->closeTag();
此输出的HTML是:
<form action="/album/add" method="POST" name="album" id="album"><input type="hidden" name="id" value=""><label><span>Title</span><input type="text" name="title" value=""></label><label><span>Artist</span><input type="text" name="artist" value=""></label><input type="submit" name="submit" id="submitbutton" value="Add"></form>
但是,遵循教程表单应如下所示:
问题:
为什么ZF2不生成任何新行标记,例如每行之间的<p>
或<div>
?在我的浏览器中,所有输入都在同一行(可能是教程中未提及的某些样式问题)但是我预计会生成一些额外的标签
为什么行动/album/add
已更改为/album/add
- 是否有任何安全原因?表单操作设置为$form->setAttribute('action', $this->url('album', array('action' => 'add')));
但是当我使用相同的方法生成链接网址<a href="<?php echo $this->url('album', array('action' => 'add')); ?>">test</a>
时,它会按照我的预期创建/album/add
网址
答案 0 :(得分:1)
为什么ZF2不生成任何新的行标记,例如每行之间的
<p>
或<div>
?
ZF1表单系统最大的批评之一是通过以编程方式生成表单标记(使用装饰器),这使得用户很难自定义输出。因此,ZF2中的助手使用了最小的标记,允许用户在视图中用自己的标记包装输入:
<?=$this->form()->openTag($form)?>
<?=$this->formHidden($form->get('id'))?>
<div class="form-row">
<?=$this->formRow($form->get('title'))?>
</div>
<div class="form-row">
<?=$this->formRow($form->get('artist'))?>
</div>
[etc.]
仍然可以通过扩展formRow
帮助程序自动完成此操作。
为什么行动
/album/add
已更改为/album/add
我之前从未注意过这一点。我猜表单类被设置为自动转义HTML属性值(通常是一件好事)。它似乎仍然很好,所以我不会太担心这个。如果您认为应该改变行为,也许在Github上为它打开一个问题。