【问题标题】:How to handle a 1:n relation in smyfony2 forms?如何处理 smyfony2 表单中的 1:n 关系?
【发布时间】:2013-07-11 08:55:11
【问题描述】:

我需要一个项目翻译实体和维护内容的简单方法。一个“myentity”可以有多个“myentity_trans”。

到目前为止这很容易,但我需要一个简单的动态表单,而不会对 symfony2 默认行为进行太多更改。

当我创建/编辑“myentity”时,我需要为每种语言创建一个“myentity_trans”子表单。有没有一种通用的方法来处理这一切?

以我的实体为例:

myentity
- id
- status

myentity_trans
- id
- myentity_id
- language_id
- ...

language
- id
- name

编辑 1: 如果我有相关实体,这里我的表单配置可以编辑:

$builder
    ->add('name')
    ->add('trans', 'collection', array(
          'type' => new RetailerTransType(),
          'allow_add' => true,
          'allow_delete' => true
    ));

现在我喜欢每种可能的语言都使用空表单,因此用户可以轻松创建翻译。我尝试使用查询生成器,但它显然不适用于集合类型。

【问题讨论】:

  • 这就是我在此期间发现的。如何将其与我的语言表连接起来,以便为每种语言获得一个空表格?如果可能,无需其他 javascript 请求。
  • 不,您需要 javascript 来添加空表单。但你不会向服务器发出请求。空子表单的原型已经在你的 html 中了。
  • 它在我编辑实体时有效,但在创建时无效?我尝试在我的表单类型类中使用带有左连接的查询构建器来获取每种语言的空实体集合,但我仍然遇到语法错误。 :( 有人对此有经验吗?
  • 这里的问题是到目前为止没有人知道你做了什么。错误信息是什么?你的表单类型是什么?没有人能帮忙,只能链接没有更多信息的教程。请在常见问题解答中告知自己如何提出正确的问题。

标签: php forms symfony doctrine-orm


【解决方案1】:

您应该使用Gemo\DoctrineExtensions\Translatable,它可以使用Stof\DoctrineExtensionsBundle轻松与symfony2集成

...如果使用带有可用特征的 PHP 5.4+ 或我的提示KnpLabs\DoctrineBehaviors\Translatable

为了将这些与您的表单很好地集成,请使用a2lix\TranslationFormBundle。 此捆绑包提供您正在寻找的内容 - 适合您语言的翻译集合。

请参阅 my answer here 快速了解如何使用 DoctrineBehaviors\Translatable 和当前的语言环境代理,我发现这是一个非常舒适的解决方案。

只需创建类EntityEntityTranslation,包括代理行...调用$entity->getProperty()

-> 自动应用当前语言环境。尽可能简单:-)

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    相关资源
    最近更新 更多