【问题标题】:Symfony 3 - EntityType - Rendering database valueSymfony 3 - EntityType - 渲染数据库值
【发布时间】:2018-04-22 13:35:35
【问题描述】:

我在 Symfony 3 的 formType 中使用 EntityType。 当我以新形式显示它时,一切都很好,choicetype liste 包含我数据库中的所有值。 但是当我从我的数据库加载现有数据时,选择列表不会从数据库加载值,它会显示占位符。 我已签入数据库并保存了值。 我的表格是这样的

->add('tester', EntityType::class, array(
                'class' => 'MyBundle:TesterList',
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('u')
                    ->orderBy('u.name', 'ASC');
                },
                'choice_label' => 'name',
                'choice_value' => 'name',
                'required' => true,
                'placeholder' => 'Select a tester',
                ))

为了测试,我尝试将 EntityType 更改为具有 2 列表的 ChoiceType,它可以完美运行。 不知道EntityType有什么问题。

编辑: 该字段在我的表单中显示如下:

 {{ form_label(formHydraulicTest.testHeader.tester,'Tester' | trans) }}
 {{ form_widget(formHydraulicTest.testHeader.tester) }} 

实体 TesterList 与其他实体没有任何关系。它只是一个名称列表。

当我尝试保存时,EntityType 返回一个 TesterList 对象,所以我在 TesterList 实体中添加了这个函数。

public function __toString() {
    return $this->name;
}

这样我只保存了测试人员的姓名,而不是实体的链接。

【问题讨论】:

  • 请添加一些关于您的 TesterList 实体和表单的信息。这段代码没有任何问题,所以问题一定出在其他地方。

标签: php symfony symfony-3.3


【解决方案1】:

我找到了一种让它工作的方法,我只是用 twig 选择默认值。我已经这样更新了

 {{ form_label(formHydraulicTest.testHeader.tester,'Tester' | trans) }}
                    {{ form_widget(formHydraulicTest.testHeader.tester, { value : formHydraulicTest.testHeader.vars.value.tester}) }} 

我不确定这是解决我的问题的最佳方法,但它确实有效;)

【讨论】:

    【解决方案2】:

    通用 EntityRepository 可能不知道仅通过创建一个命名的 QueryBuilder 'u' 来获取哪些实体。您可能需要实际的 TesterList 存储库。所以你的代码看起来像这样:

    ->add('tester', EntityType::class, array(
                    'class' => 'MyBundle:TesterList',
                    'query_builder' => function (TesterListRepository $er) {
                        return $er->createQueryBuilder('u')
                                  ->orderBy('u.name', 'ASC');
                    },
                    'choice_label' => 'name',
                    'choice_value' => 'name',
                    'required' => true,
                    'placeholder' => 'Select a tester',
                    ))
    

    当然,将 TesterListRepository 添加到表单类顶部的使用语句中。

    【讨论】:

    • 它没有改变我的问题。我认为问题可能是 TesterList 实体没有链接到持有表单的实体?
    • 实体不必通过关系进行内在链接以在表单中创建查询构建器。
    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多