symfony - 如何从 PHP 预填充 EntityType 类型的字段

标签 symfony symfony-forms

在我的表单中,我有一个 EntityClass 类型的字段:

$builder
    ->add(
        'user',
        EntityType::class,
        [
            'required' => false,
            'label' => 'User',
            'placeholder' => 'Please choose',
            'choice_label' => 'email',
            'choice_value' => 'id',
            'class' => 'AppBundle:User',
        ]
    )
;

此字段工作正常 - 直到我尝试从我的 PHP 代码中预填充它。然后它保持为空,只显示“请选择”。

预填充看起来像这样:

$user = $this->userRepository->find(...);
$form->get('user')->setData($user);

但是如果我调用 ->setData($user->getId()),甚至 ->setData($user->getEmail()).

那么如何预填充 EntityType 类型的字段?

最佳答案

你不应该预填Form,你应该预填Model,如果你需要的话。

$user = $this->userRepository->find(...);

$entity = new YourEntity();
$entity->setUser($user);

$form = $this->createForm(YourEntity::class, $entity);

这与 EntityType 无关。它与 Symfony 中的任何类型有关——没有办法为它们绑定(bind)默认值。数据绑定(bind)在模型上。

来自评论的 UPD:这不是真的,Form 可以在没有 Model 的情况下使用。它可以在没有 Doctrine 实体或任何其他 ORM(或非 ORM)实体的情况下使用。但他们仍然使用数据进行操作,i.o.与模型。

\Symfony\Component\Form\FormFactoryInterface 有定义

public function create($type = 'form', $data = null, array $options = array());

所以当您使用表单组件时,某种$data总是存在的。

关于symfony - 如何从 PHP 预填充 EntityType 类型的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39593556/

相关文章:

symfony - 在Symfony 2中验证动态加载的选择

php - Symfony 表单字段即使有错误也有效?

symfony - 如何在 Symfony2/Twig 中将 form_rest() 渲染为隐藏字段?

Symfony5 形式 : how to disable "required" for all fields by default?

Symfony2 数据转换器、验证器和错误消息

mysql - 如何使用 Doctrine2 和 MySQL 执行存储过程

php - 如何使用注入(inject)的 SerializerInterface 配置 Normalizer

php - 两个 MySQL 表之间的最长前缀

php - FOS/用户包 : Unrecognized field: usernameCanonical

forms - 使用选项卡以表格形式编辑 Symfony2 大实体