如何解决如何在Symfony 5中为与其他具有关系的实体以Symfony方式建立关系创建表单?
大家好,在此先感谢您的帮助! 假设我有一个Symfony 5 应用,其实体如下: 英雄,职业,装甲群与装甲和武器群与武器。 它们之间的关系是这样的:
- 唯一的英雄是一组职业,一个 Armor 和一个 武器
- 单个独特的职业可以包含许多英雄,许多 ArmorGroups 和许多武器组
- 单个唯一的 ArmorGroup 是许多 Armors 的集合
- 单个独特的武器组是许多武器 的集合
- 单个唯一的 Armor 位于一个 ArmorGroups 的集合中,专门用于一个 Professional
- 单个独特的武器位于一个武器组的集合中,并且专门用于一个专业
这是一个图:
我想创建一个 HeroType 表单,以将 Armor 和武器的选择限制为先前选择的 Profession 和将其显示为 EntityType 单选列表,其名称基于 Armor 的 ArmorGroups 和 WeaponGroups 的数据strong>武器。所有类都有许多唯一的参数。
这是我无法使用的方式:
<?PHP
class HeroType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder
->add('name',NumberType::class,[
'attr' => ['placeholder' => 'John Doe'],'label' => 'Hero name.','required' => true,])
->add('profession',EntityType::class,[
'choice_label' => 'name','class' => Profession::class,'group_by' => 'affiliation','label' => 'Profession','multiple' => false,'required' => false,])
->add('item_armor',[
'choice_label' => 'model','class' => ItemArmor::class,'group_by' => 'material','label' => 'Armor',])
->add('item_weapon','class' => ItemWeapon::class,'label' => 'Weapon',])
->add('save',SubmitType::class,['label' => 'Create Hero!']);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Hero::class,''
]);
}
}
它无法获取'choice_label'和'group_by'的属性。我想为英雄创建一个表单,该表单可从 ArmorGroups /武器组获取数据以用作标签,但值应为 Armor /武器 ID
更新: 这段代码正确并按预期呈现了表单:
<?PHP
class HeroType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder,[
'choice_label' => function ($profession) {
return $profession->getName();},'group_by' => function ($profession) {
return $profession->getAffiliation();},[
'choice_label' => function ($item_armor) {
return $item_armor->getIdItemArmor()->getModel();},'group_by' => function ($item_armor) {
return $item_armor->getIdItemArmor()->getMaterial();},[
'choice_label' => function ($item_weapon) {
return $item_weapon->getIdItemWeapon()->getModel();},'group_by' => function ($item_weapon) {
return $item_weapon->getIdItemWeapon()->getMaterial();},''
]);
}
}
但是现在我得到了错误:
在属性路径“专业”处给出的类型为“ App \ Entity \ Profession或null”,“ Doctrine \ Common \ Collections \ ArrayCollection实例”的预期参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。