【问题标题】:New forms - embedding a collection of forms - Symfony2新表单 - 嵌入表单集合 - Symfony2
【发布时间】:2013-08-12 23:46:16
【问题描述】:

我做的和这里解释的一样:http://symfony.com/doc/current/cookbook/form/form_collections.html

但就我而言,我想添加新的“标签”,而不是通过单击链接手动添加,而是自动添加。我给我的模板一个包含项目的数组,并且我想为每个项目添加一个新表单 - 项目的数量应该等于表单的数量。

如果可能的话,我更喜欢这样的解决方案:

{% for i in items %}

    {{ i.name }} {{ form_widget(form.tags[loop.index0].name) }}

{% endfor %}

但是如何在控制器中自动创建对象呢?它告诉我没有 index=1 的对象,是的 - 没有,但没有办法自动创建它们,并且不需要在我的控制器中创建例如 10 个相同类型的空对象? :(


我在想的另一件事是这样的:

{% for i in items %}

 <ul class="orders" data-prototype="{{ form_widget(form.orders.vars.prototype)|e }}">

{{ i.name }} and here should be a field from the form, for example tag.name

 </ul>

{% endfor %}

我建议把cookbook里给的js改成这样,但是我js不好,我的尝试也没有效果。

我试着把它放在循环中:

<script>
   addTagForm(collectionHolder);
</script>

这在 .js 文件中:

var collectionHolder = $('ul.orders');

jQuery(document).ready(function() {

   collectionHolder.data('index', collectionHolder.find(':input').length);

   function addTagForm(collectionHolder) {

    var prototype = collectionHolder.data('prototype');

    var index = collectionHolder.data('index');

    var newForm = prototype.replace(/__name__/g, index);
    collectionHolder.data('index', index + 1);

    var $newFormLi = $('<li></li>').append(newForm);
}

});

【问题讨论】:

  • 在我的例子中,我只需要 10 个对象(总是),所以我从控制器创建它们为空并将它们传递给视图。但在你事先不知道的情况下,不确定这是否是一个好的解决方案......

标签: javascript symfony


【解决方案1】:

假设你的主类有 addTag($tag) 方法,你可以给它添加不同的'new'标签。

课堂任务

public function addTag($tag){
    $this->tags[]=$tag;

    return $this;
}

在你的控制器中(假设这里有 10 个标签)

$task=new Task();
for($i=0;i<10;i++){
   $task->addTag(new Tag());
}
$form->setData($task);

在你看来

{% for tag in form.tags %}
 <ul class="orders">
    <li>{{ form_widget(tag.name) }}</li>
 </ul>
{% endfor %}

如果不需要手动点击,可以去掉 JavaScript 部分。

【讨论】:

  • 感谢您的回答,但我想避免在控制器中手动创建新标签的部分,因为它们的数量每次都不同,而且大多数情况下它们将在 40-50 左右。当然,如果有办法避免这种情况。
  • 你也可以把它放在formtype而不是controller中,然后在创建form的时候,你可以做类似new TaskType(50);
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多