【发布时间】:2017-03-01 12:31:37
【问题描述】:
我一直在学习关于embedding 的一组表单的 Symfony 3 教程,我想将这个想法扩展到额外的嵌套级别。我环顾四周,Symfony 2 有部分答案,但没有全面的答案(3 也没有)。
如果我们以教程 Task 有很多 Tag 为例,我将如何对其进行编码使其扩展到:Task 有很多 Tag 有很多 SubTag?
到目前为止,我想我了解 Form 类:
任务:
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('description');
$builder->add('tags', CollectionType::class, array(
'entry_type' => TagType::class,
'allow_add' => true,
'by_reference' => false,
'allow_delete' => true
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Task',
));
}
}
标签:
class TagType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name');
$builder->add('sub_tags', CollectionType::class, array(
'entry_type' => SubTagType::class,
'allow_add' => true,
'by_reference' => false,
'allow_delete' => true
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Tag',
));
}
}
子标签:
class SubTagType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\SubTag',
));
}
}
还有基本的 Twig 类:
{{ form_start(form) }}
{# render the task's only field: description #}
{{ form_row(form.description) }}
<h3>Tags</h3>
<ul class="tags">
{# iterate over each existing tag and render its only field: name #}
{% for tag in form.tags %}
<li>{{ form_row(tag.name) }}</li>
{% for sub_tag in tag.sub_tags %}
<li>{{ form_row(sub_tag.name) }}</li>
{% endfor %}
{% endfor %}
</ul>
{{ form_end(form) }}
但在这一点上,我不确定原型和 javascript 将如何工作。有人可以解释我将如何采取下一步吗?这甚至是正确的方法吗?
我的第一个想法是,如果我们正在做额外的关卡,将 JS 推广到任意数量的关卡可能是明智的,因为本教程使用的 JS 只能在单个关卡上工作。
我能找到的最接近的工作代码是这个堆栈溢出答案here。但是,它似乎不像描述的那样工作,而且我很难弄清楚到底出了什么问题。
【问题讨论】:
-
嘿 - 如果您遇到了我无法在回答中解决的特定问题,请告诉我。 (我看到您曾一度将其标记为“已接受”。)
-
由于某种原因不被接受!
标签: javascript php forms symfony prototype