【问题标题】:Symfony2 First form entity overriding secondSymfony2 第一个表单实体覆盖第二个
【发布时间】:2014-08-03 19:49:08
【问题描述】:

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

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

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

问题是搜索表单以 twig 呈现,就好像它是 kontakt 表单一样。

澄清一下,SearchEntity 有字段nameemailContactEntity 也有相同的字段,但添加了一些其他字段。当搜索表单在 twig 中呈现时,它会显示 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-&gt;createView()

【问题讨论】:

  • 向我们展示更多代码。包括您如何使用 twig 呈现表单。
  • 向我们展示呈现该树枝文件的操作
  • 什么意思,动作?我使用 $form->createView() 发送响应。没有别的了。
  • 您需要显示代码以便我们为您提供帮助。 3行是不够的。我们不是通灵者。动作是控制器中的一个函数。
  • 它非常大,因为它正在做很多其他的事情,所以它没有效率,但我将展示一个创建表单的片段。

标签: forms symfony


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我发现了问题所在。是翻译。

    我是克罗地亚人,我正在构建的网站有两种语言,英语和克罗地亚语,英语作为默认语言环境。翻译以各种方式完成,但表单的翻译以及表单附带的所有内容都是通过 messages.en.php 完成的。

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

    ... Some data to translate ...
    
    'Ime' : 'Personal name or bussiness'
    'Email' : 'Email address
    
    ... Some other data to translate
    

    所以,当 twig 试图渲染这个时......

    form_label(form.ime, 'Ime')
    

    它呈现了键 Ime 的翻译。电子邮件字段也发生了同样的事情。其他一切都井井有条。我只是将标签值更改为“搜索名称”或类似的东西。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 2021-04-12
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多