生成表单 - 新的行和行动

时间:2014-07-14 08:58:40

标签: php zend-framework zend-framework2

我正在学习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="&#x2F;album&#x2F;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>

但是,遵循教程表单应如下所示:enter image description here

问题:

  1. 为什么ZF2不生成任何新行标记,例如每行之间的<p><div>?在我的浏览器中,所有输入都在同一行(可能是教程中未提及的某些样式问题)但是我预计会生成一些额外的标签

  2. 为什么行动/album/add已更改为&#x2F;album&#x2F;add - 是否有任何安全原因?表单操作设置为$form->setAttribute('action', $this->url('album', array('action' => 'add')));但是当我使用相同的方法生成链接网址<a href="<?php echo $this->url('album', array('action' => 'add')); ?>">test</a>时,它会按照我的预期创建/album/add网址

1 个答案:

答案 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已更改为&#x2F;album&#x2F;add

我之前从未注意过这一点。我猜表单类被设置为自动转义HTML属性值(通常是一件好事)。它似乎仍然很好,所以我不会太担心这个。如果您认为应该改变行为,也许在Github上为它打开一个问题。