Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果缺少,请将当前对象值添加到ChoiceType值_Php_Symfony_Events_Symfony 3.3 - Fatal编程技术网

Php 如果缺少,请将当前对象值添加到ChoiceType值

Php 如果缺少,请将当前对象值添加到ChoiceType值,php,symfony,events,symfony-3.3,Php,Symfony,Events,Symfony 3.3,我目前正在将一个应用程序转换为Symfony 3.3,我对如何实现以下目标感到困惑 我有一个名为Responsible(Stringvalues)的ChoiceType字段,它是从数据库视图填充的。我希望在进入编辑模式时看到Responsible字段已经填充,这是在记录Responsible值是Responsible字段值的一部分时进行的 但此后这些值发生了变化,因此当我开始编辑现有记录时,当该值不是已填充值的一部分时,它将显示为请选择 我的目标是将缺少的值添加到Responsible字段值中,

我目前正在将一个应用程序转换为Symfony 3.3,我对如何实现以下目标感到困惑

我有一个名为
Responsible
String
values)的
ChoiceType
字段,它是从数据库视图填充的。我希望在进入编辑模式时看到
Responsible
字段已经填充,这是在记录
Responsible
值是
Responsible
字段值的一部分时进行的

但此后这些值发生了变化,因此当我开始编辑现有记录时,当该值不是已填充值的一部分时,它将显示为请选择

我的目标是将缺少的值添加到
Responsible
字段值中,以便预先选择它,但我还无法找到如何选择它

我试图查看
选项类型
中是否有一个选项,但似乎我必须通过
onPreSetData
事件来执行此操作,但即使在那里,我也只能找到如何动态添加字段,而不能向现有字段添加值

任何人都知道如何做到这一点,而哪一种是“正确”的方式

谢谢

编辑:多亏了@matval answer,如果当前值在选项中,则只缺少一些可查找的内容,因此我们没有重复的值,例如
如果(!array_key_存在($entity->getResponsible(),$choices))


形式事件是正确的方法。它们是制作动态表单的最佳方式。如中所示,您应该在
PRE_SET_DATA
事件期间添加您的
Responsible
字段

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
    $entity = $event->getData();
    $choices = ... // populate from db
    $choices[] = $entity->getResponsible();
    $form = $event->getForm();    
    $form->add('responsible', ChoiceType::class, [
        'choices' => $choices,
    ]);
});
如果您想在表单类型中保留动态字段
责任
(可能重新用于创建操作),您仍然可以使用相同的事件。您所需要做的就是删除该字段并再次添加它

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
    $entity = $event->getData();
    $choices = ... // populate from db
    $choices[] = $entity->getResponsible();
    $form = $event->getForm(); 
    $form->add('responsible', ChoiceType::class, [
        'choices' => $choices,
    ]);
});

你应该发布代码,告诉我们你在哪里。它就像一个符咒,谢谢!我看到我们可以从事件中添加表单字段,但正在寻找一种简单地添加值的方法。无论如何,这样做看起来太复杂了,所以我只需将
Responsible
字段保留在
PreSet
事件中。注意:如果(!array_key_存在($entity->getResponsible(),$choices)),请使用类似
的方法避免在选项字段中出现重复的值(如果该值没有丢失)。
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
    $entity = $event->getData();
    $choices = ... // populate from db
    $choices[] = $entity->getResponsible();
    $form = $event->getForm(); 
    $form->add('responsible', ChoiceType::class, [
        'choices' => $choices,
    ]);
});