当使用EntityType构建select时,如何在Twig中设置值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当使用EntityType构建select时,如何在Twig中设置值?相关的知识,希望对你有一定的参考价值。

在表单中说我有一个这样的构建器选项:

->add('choice', ChoiceType::class, [
   'choices' => [
       'Cheese' => 'cheese',
       'Plain' => 'plain
     ]
])

让我们说我们正在编辑这个选项,在他们已经选择的数据库中。使用twig,我们可以像这样编写小部件:

{{ form_widget(BurgerForm.choice, {
  'value': burger.type
}) }}

这将使数据库中的值成为select的预选值。但是如果你用EntityType做同样的事情:

->add('choice', EntityType::class, [
   'class' => 'AppBundle:BurgersTypes',
   'choice_label' => 'type'
])

并且您使用相同的树枝,它不预先从数据库中选择选项。如何从数据库中获取值以显示为窗口小部件的预选值?

答案

预先选择此表单的值意味着在基础数据上设置值。在您的情况下,控制器应该看起来像:

// src/AppBundle/Controller/MyController.php

namespace AppBundleControllerMyController;

use AppBundleEntityOrder;
use AppBundleEntityBurgersTypes;
use AppBundleFormTypeFormType;
use SymfonyComponentHttpFoundationRequest;

public function formAction(Request $request)
{
    $obj = new Order();
    $defaultBurgerChoice = new BurgersTypes('cheese');
    $ob->setChoice($defaultBurgerChoice);
    $form = $this->create(FormType::class, $obj);

    $form->handleRequest($request);

    ...

    // Now, if the form needs to render a value for `choice`, 
    // it will have the value of BurgerForm.choice  determined
    // intentionally - by your default, or overridden and 
    // handled in the request!
    return [
        'BurgerForm' => $form->createView()
    ]
}

以上是关于当使用EntityType构建select时,如何在Twig中设置值?的主要内容,如果未能解决你的问题,请参考以下文章

扩展 EntityType,仅将选项设置为选定的实体

当属性值来自引用表时,应该如何填充实体(bean)对象属性?

选中 Symfony 表单 EntityType 复选框

如何验证 EntityType 字段?

Symfony Forms EntityType 使用 JS 全选

如何防止 EntityType 在与同一实体(父)的多对一关系中显示当前对象?