1

我有两个实体:产品和类别。每个实体使用Symfony Form Builder呈现一个自定义表单。

我正在尝试使用collection field type在 Products 表单中包含 Categories 表单。包含行如下所示:

$builder->add('idCategory', 'collection', array('type' => new CategoryType());

它工作正常(根据Symfony 文档)。但我不想用 JavaScript 创建表单,我想让它与表单的其余部分一起呈现,而不更改树枝模板:

<form action="{{ path('product_create') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <button type="submit">Create</button>
</form>

甚至可能吗?有什么想法吗?

4

2 回答 2

1

您知道要包含在产品中的类别数量吗?

于 2013-08-10T02:18:42.333 回答
0

我找到了一个解决方法,因为不使用 JavaScript 似乎不可能自动呈现表单。

我不是一次渲染整个表单,而是使用{{ form_widget(form) }}逐个字段渲染并使用{{ form_widget(form.categoy.vars.prototype) }}来渲染 Category 集合。模板代码如下所示:

<div id="form">
    {{ form_start(form) }}
    {{ form_errors(form) }}
    ... 
    {{ form_row(form.name) }}
    {{ form_row(form.price) }}
    ...
    <h2>Categories</h2>
    {{ form_row(form.idCategory) }}
    {{ form_widget(form.idCategoryNew.vars.prototype) }}
    ...
    <button type="submit">Create</button>
    {{ form_end(form) }}
</div>

和产品类型:

$builder
    ->add('name'))
    ->add('price'))
    ...
    ->add('idCategory', 'entity', array('class' => 'MyBundle\Entity\Category'))
    ->add('idCateogryNew', 'collection', array('type' => new CategoryType(), 'allow_add' => true))
    ...

编辑:

我找到了一个更好的解决方法,其中包括将收集表单传递给树枝模板。这种方式很容易处理表单提交后的post请求。如果有人想要代码,请询问:)

编辑2:

根据@agapitocandemor 请求:

在您的MainEntityController(在我的情况下为 ProductController)中,搜索呈现表单的方法(newAction在我的情况下)并创建要呈现的实体表单:

public function newAction()
{
    $entity = new Product();
    $entityform = $this->createForm(new ProductType(), $entity);
    $subentityform = $this->createForm(new CategoryType(), new Category);

    return $this->render('MyBundle:Product:new.html.twig', array(
        'entity' => $entity,
        'entityform' => $entityform->createView(),
        'subentityform' => $subentityform->createView()
    ));
}

最后,为了呈现subentityform你只需{{ form_widget(subentityform) }}要从new你的主实体的模板中调用。

于 2013-08-11T14:57:05.897 回答