Symfony2第一个表单实体覆盖第二个

时间:2014-08-03 19:49:09

标签: forms symfony

我在页面上有一个联系表单,其中包含名称字段,电子邮件字段和textarea字段。它以最简单的方式制作......

$contactEntity = new ContactEntity();
$builder-> $this->container->get('form.factory')->createBuilder('form', $kontaktEntity, array();
$builder->add() ... fields added

然后,在管理区域中,我有一个搜索表单,用于搜索带有名称和电子邮件字段的重新发送的消息。我使用不同的实体创建该表单,其中的字段nameemail是ContactEntity中其他六个字段之一。

问题是搜索表单在树枝中呈现,好像它是kontakt形式。

为了澄清,SearchEntity包含字段nameemailContactEntity也有相同的字段,但添加了一些其他字段。当搜索表单以树枝形式呈现时,它会显示nameemail字段,就好像它是ContactEntity的一部分。

此外,树枝定制不起作用。我无法更改标签文本值,我无法删除HTML5验证,也无法做任何事情,因为没有任何作品。我尝试重命名搜索实体中的字段,但它不起作用。

Twig渲染是在diffrenet twig脚本上进行的,并且在两种形式中都是正常的和基本的。这是在搜索表单上。将标签taxt更改为Name不起作用。另一方面,提交值已正确呈现。

{{ form_start(form, {attr: {'no-validate' : 'novalidate'}}) }}
        <div class="search-rom">
            {{ form_label(form.name, 'Name') }}
            {{ form_errors(form.name) }}
            {{ form_widget(form.name) }}
        </div>

        <div class="search-rom">
            {{ form_label(form.email, 'Email') }}
            {{ form_errors(form.email) }}
            {{ form_widget(form.email) }}
        </div>
{{ form_end(form) }}

总而言之,twig渲染了构建表单与之无关的实体的两个字段。

修改

我刚刚测试了在提交表单时是否填写了SearchEntity,而且是正确的值。我真的不知道这里发生了什么。

编辑2

这是控制器中messageAction()方法的代码片段。

$searchEntity = new SearchEntity();
$builder = $this->container->get('form.factory')->createBuilder('form', $searchEntity, array());
$builder->add('name', 'text')
        ->add('email', 'text')
        ->getForm();

然后在带有$form->createView()

的回复中呈现表单

2 个答案:

答案 0 :(得分:0)

也许您不需要将构建器传递给实体。在其他示例中,您可以在获取数据后创建实体。

How to render a form without a class in other service?

http://symfony.com/doc/current/book/forms.html#using-a-form-without-a-class

答案 1 :(得分:0)

我发现了问题所在。它的翻译。

我克罗地亚语和网站我的建筑有两种语言,英语和克罗地亚语,英语作为默认语言环境。翻译以各种方式完成,但表格的翻译和表格中的所有翻译都是通过messages.en.php完成的。

对于翻译,我选择数组类型。 message.en.php看起来像这样......

... Some data to translate ...

'Ime' : 'Personal name or bussiness'
'Email' : 'Email address

... Some other data to translate

所以,当树枝试图渲染这个......

form_label(form.ime, 'Ime')

它呈现了密钥Ime的翻译。同样的事情发生在电子邮件领域。其他一切都井然有序。我刚刚将标签值更改为&#39;搜索名称&#39;或类似的东西。

至于如何将翻译限制为只有一种形式,我不知道。我阅读翻译部分但无法找到任何内容。