Symfony 3.4 表单字段名称和带有选项 indexBy 的实体之间的冲突
Symfony 3.4 conflict between form field name and entity with option indexBy
我正在尝试创建一个表单,但似乎存在由 OneToMany 注释的选项 indexBy="label"
引起的冲突
The name "Exemple frais" contains illegal characters. Names should start with a letter, digit or underscore and only contain letters, digits, numbers, underscores ("_"), hyphens ("-") and colons (":").
其中 "Exemple frais" 是我实体的标签。
/**
* User.
*
* @ORM\Table(name="user")
* @ORM\Entity()
*/
class User extends BaseUser
{
(...)
/**
* @var Frais[]
*
* @ORM\OneToMany(targetEntity="App\Entity\Frais", mappedBy="user",indexBy="label")
*/
private $frais;
在这里,我的表单域:
->add(
'frais',
CollectionType::class,
[
'entry_type' => FraisType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'prototype' => true
]
)
即使我在 FraisType 中设置了下一个函数:
public function getBlockPrefix()
{
return 'frais';
}
/**
* {@inheritDoc}
*/
public function getName()
{
return 'frais';
}
/**
* {@inheritDoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'data_class' => Frais::class
]
);
}
我找到的唯一解决方案是将我的 CollectionType 更改为 EntityType。您知道避免我更改它的任何解决方案吗?
所以。我选择使用 "data" 表单域选项。 这不是我问题的真正答案,但它有效
->add(
'frais',
CollectionType::class,
[
'entry_type' => FraisType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'prototype' => true,
'data' => $this->em->getRepository(FraisDivers::class)->findBy(['user' => $this->user])
]
)
这种方式可以防止通过关系 link 获取 Frais 实体并防止 indexOf 选项混乱。
我正在尝试创建一个表单,但似乎存在由 OneToMany 注释的选项 indexBy="label"
引起的冲突The name "Exemple frais" contains illegal characters. Names should start with a letter, digit or underscore and only contain letters, digits, numbers, underscores ("_"), hyphens ("-") and colons (":").
其中 "Exemple frais" 是我实体的标签。
/**
* User.
*
* @ORM\Table(name="user")
* @ORM\Entity()
*/
class User extends BaseUser
{
(...)
/**
* @var Frais[]
*
* @ORM\OneToMany(targetEntity="App\Entity\Frais", mappedBy="user",indexBy="label")
*/
private $frais;
在这里,我的表单域:
->add(
'frais',
CollectionType::class,
[
'entry_type' => FraisType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'prototype' => true
]
)
即使我在 FraisType 中设置了下一个函数:
public function getBlockPrefix()
{
return 'frais';
}
/**
* {@inheritDoc}
*/
public function getName()
{
return 'frais';
}
/**
* {@inheritDoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'data_class' => Frais::class
]
);
}
我找到的唯一解决方案是将我的 CollectionType 更改为 EntityType。您知道避免我更改它的任何解决方案吗?
所以。我选择使用 "data" 表单域选项。 这不是我问题的真正答案,但它有效
->add(
'frais',
CollectionType::class,
[
'entry_type' => FraisType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'prototype' => true,
'data' => $this->em->getRepository(FraisDivers::class)->findBy(['user' => $this->user])
]
)
这种方式可以防止通过关系 link 获取 Frais 实体并防止 indexOf 选项混乱。