我想在SF2 / Twig中循环Form_row:
守则:
{% for post in posts %}
{{ form_row(formreply.body) }}
{% endfor %}
我有一个时间表有多么贴心但是它只显示了时间轴上第一个状态的表单,
更新:
问题不在Posts循环::
中另一个例子:
{% for i in 0..10 %}
{{ form_row(formreply.body) }}
{% endfor %}
它应该向我显示Form_Row十次,对吧?
它只为我展示了一次..
注意'我已经在控制器'
中返回了formreply答案 0 :(得分:1)
你不能像这样循环form_row。表单行只能呈现一次。如果您尝试为每个PostReply多次创建相同的表单并在循环中呈现它们 - 它将无法再次运行,因为您将获得相同的ID和字段名称。
我假设您收集了帖子,并且您希望以时间轴样式显示它们,并在每个帖子旁边呈现回复字段。为了实现这一点,我建议你创建PostReply实体和PostReplyType(表单类型)。正如我之前所说,你必须使用动态名称生成。
这可以让你知道应该去哪个方向:
class Post
{
private $id;
private $title;
}
class PostReply
{
private $id;
private $postId;
private $message;
}
class PostReplyType extends AbstractType
{
private $name = 'reply_form';
public function setName($name){
$this->name = $name;
}
// builder and other required code
}
然后你可以在你的控制器中做这样的事情:
$posts = $postsRepository->findAll();
$postReplyForms = new ArrayCollection();
foreach($posts as $post) {
$postReply = new PostReply();
$postReplyType = new PostReplyType();
$postReplyType->setName('reply_form_' . $post->getId());
$form = $this->createForm($postReplyType, $postReply);
$postReplyForms->add($form);
}
在树枝上:
{% for form in postReplyForms %}
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{% endfor %}
这应该将具有动态ID和名称的表单呈现为:
<form>
<input type="text" id="reply_form_1_field" name="reply_form_1[field]"/>
</form>
<form>
<input type="text" id="reply_form_2_field" name="reply_form_2[field]"/>
</form>
Symfony2表单是框架中非常复杂的部分,我建议从文档开始,以便基本了解SF2表单的工作原理。然后谷歌搜索更多用例。祝你好运。