我正致力于获取动态表单以将产品加入类别表。
游戏实体有一个与之相关的游戏类别。
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\GameCategories", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="category_id")
*/
public $category_id;
/**
* Set categoryId
*
* @param \AppBundle\Entity\GameCategories $categoryId
*
* @return Products
*/
public function setCategoryId(\AppBundle\Entity\GameCategories $categoryId = null)
{
$this->category_id = $categoryId;
return $this;
}
/**
* Get categoryId
*
* @return \AppBundle\Entity\GameCategories
*/
public function getCategoryId()
{
return $this->category_id;
}
然后是事件监听器
$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) {
$product = $event->getData();
$form = $event->getForm();
// $game_id = $product->getGameId();
$game_id = $product['game_id'];
$formOptions = array(
'class' => 'AppBundle\Entity\Products',
'property' => 'category_id',
'query_builder' => function (EntityRepository $er) use ($game_id) {
$query = $er->createQueryBuilder('i')
->select(array('i'))
->where('i.game_id = :game_id')
->setParameter('game_id', $game_id)
->orderBy('i.name', 'ASC');
return $query;
},
);
$form->add('category_id', EntityType::class, $formOptions);
}
);
当我执行onclicks时,它按预期工作,并且正确的选择框更新。
但是当我实际提交表单时,我收到以下错误。
“预期参数类型为”AppBundle \ Entity \ GameCategories“,”AppBundle \ Entity \ Products“给出”
PRE_SUBMIT看起来好像正在使用我试图让它做的产品。但是当它实际提交时它正在寻找另一个实体。
有没有人对如何解决这个问题有任何想法,或者如何更好地了解如何实施链式下拉序列。
提前致谢。
编辑一个
我在查询构建器中使用了错误的实体。
我能够让动态表单改变,但它只显示整数...
选择类别...... 1 2 3
而不是 选择类别...... 第1类 第2类 第3类 // Category ID
$formOptions = array(
'class' => 'AppBundle\Entity\GameCategories',
'label' => 'Game Category',
'property' => 'category_id',
'placeholder' => 'Choose a Category...',
'query_builder' => function (EntityRepository $er) use ($game_id) {
$query = $er->createQueryBuilder('i')
->select(array('i'))
->where('i.gameId = :game_id')
->setParameter('game_id', $game_id)
->orderBy('i.name', 'ASC');
return $query;
},
);
// create the field, this is similar the $builder->add()
// field name, field type, data, options
$form->add('category_id', EntityType::class, $formOptions);
我如何获得名称而不是整数?
编辑两个
这就是最终的工作。
$formOptions = array(
'class' => 'AppBundle\Entity\GameCategories',
'label' => 'Game Category',
'property' => 'category_id',
'choice_label' => function ($category) {
return $category->getName();
},
'placeholder' => 'Choose a Category...',
'query_builder' => function (EntityRepository $er) use ($game_id) {
$query = $er->createQueryBuilder('i')
->select(array('i'))
->where('i.gameId = :game_id')
->setParameter('game_id', $game_id)
->orderBy('i.name', 'ASC');
return $query;
},
);
答案 0 :(得分:1)
您要在表单中添加包含category_id
的字段GameCategories
,但您要使用Products
列表对其进行配置,因为您设置了'class' => 'AppBundle\Entity\Products'
。您应该将班级设置为AppBundle\Entity\GameCategories
,以获取类别列表。
修改
要选择用于在列表中显示实体的属性,请使用choise_label
选项:
<强>
choice_label
强>
输入:string
,callable
或PropertyPath
这是应该用于在HTML元素
中将实体显示为文本的属性