0
所以我有一个Symfony 3窗体与多个ChoiceType列表与几个常量选项。 然后,这些选择将保存在数据库中(使用原则管理)在'json_array'字段中。symfony多choicetype没有预先填充
当我保存表单,选择的选择是正确保存在数据库中:
["my.Choice.1","my.Choice.2"]
但是,当我想再次编辑这个形式,没有选择的选项是“选择”。他们保持不受限制。
我有一个其他字段(的EntityType,多),其被正确地与从数据库中的数据预填充。
MyEntityType:
$builder
->add('myChoices', ChoiceType::class, [
'choices' => [
'choice #1' => MyEntity::CHOICE_1,
'choice #2' => MyEntity::CHOICE_2,
],
'expanded' => true,
'multiple' => true,
])
这里是我的领域是如何在实体定义。
myEntity所:
const CHOICE_1 = 'my.Choice.1';
const CHOICE_2 = 'my.Choice.2';
/**
* @var array
*
* @ORM\Column(name="my_choices", type="json_array", nullable=true)
*/
private $myChoices;
/**
* @return array
*/
public function getMyChoices()
{
return array_unique($this->myChoices);
}
/**
* @param array $myChoices
*
* @return MyEntity
*/
public function setMyChoices(array $myChoices)
{
$this->myChoices = [];
foreach ($myChoices as $myChoice) {
$this->addMyChoice($myChoice);
}
return $this;
}
/**
* @param string $myChoice
*
* @return MyEntity
*/
public function addMyChoice($myChoice)
{
$myChoice = strtolower($myChoice);
if (!$this->hasMyChoice($myChoice)) {
$this->myChoices[] = $myChoice;
}
return $this;
}
/**
* @param string $myChoice
*
* @return bool
*/
public function hasMyChoice($myChoice)
{
return in_array(strtolower($myChoice), $this->myChoices, true);
}
我的形式被称为像这样:
$myEntity = ..... // loaded from database
$form = $this->createForm(MyEntityType::class, $myEntity);
所以有没有人谁可以告诉我,我缺少的是什么?
再次感谢。
@Yoshi,是它的一个错字,感谢指点我在这。我刚刚编辑过。 –
我试图通过做类似于'$ foo-> setMyChoices(json_decode('[“my.choice.1”,“my.choice.2”]'));''复制你的问题(没有教条)控制器。这样,两个复选框都会被检查。你会尝试'dump($ myEntity-> getMyChoices())'来查看代码中实际加载的内容(由doctrine设置)吗? – Yoshi
嗨,这里是树枝转储:'array:2 [▼ 0 =>“my.choice.1” 1 =>“my.choice.2” ]' –