我正在做一个Symfony 5.4项目,我遇到了一些麻烦。
我已经看过堆叠溢出,但我找不到解决办法!
我有一个问题,因为我已经创建了一个表单,以使搜索栏在我的页面。因此,在表单中有多个输入。在其中的两个输入中,我将使用2个查询显示值(它们是两个独立实体的值,一个来自名为"en_carrier“的表,另一个位于表调用en_carrier中具体而言,此表的ID )。这两个输入必须返回整数值。
注意事项:表单不会与表en_order_state或en_carrier交互,而是与包含这两个表的ID的另一个表交互。
因此,我认为最好的解决方案是为这两者提供一个EntityType,我可以为获取所有的值创建一个特定的查询。
显然,一切都是正确的:标签、名称和价值观。但是,当我提交表单时,我会得到错误。
预期的参数类型为"int或null","object“类型为属性路径"id_carrier".
我如何解决这个问题?
我决定用这样的方式构造我的表格:
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('id_state', IntegerType::class, [
'required' => false
])
->add('id_carrier', EntityType::class, [
'class' => Carrier::class,
'required' => false,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('c')
->orderBy('c.name', 'ASC');
},
'choice_label' => 'name',
'choice_value' => function(?Carrier $carrier){
return $carrier? (int)$carrier->getId():"";
},
'label' => 'Corriere',
])
->add('order_state', EntityType::class, [
'required' => false,
'class' => OrderState::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('os')
->where('os.id_lang = 1')
->orderBy('os.state', 'ASC');
},
'choice_label' => 'state',
'choice_value' => function(?OrderState $orderState){
return $orderState? (int)$orderState->getId():"";
},
'label' => 'Stato Ordine',
])
->add('payment', TextType::class, [
'required' => false,
'attr' => array(
'class' => 'col-lg-2 control-label text-center'
)
])
->add('ps_reference', TextType::class, [
'required' => false,
'attr' => array(
'class' => 'col-lg-2 control-label text-center',
'maxlength' => 9
)
])
->add('en_reference', TextType::class, [
'required' => false,
'attr' => array(
'class' => 'col-lg-2 control-label text-center'
)
])
->add('invoice', ChoiceType::class, [
'required' => false,
'label' => 'Fattura',
'choices' => [
'no' => false,
'si' => true
]
])
->add('date', DateType::class, [
'required' => false
])
->add('submit', SubmitType::class);
;
}这是我在表单中使用的两个实体
承运商
class Carrier
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id_carrier;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;秩序状态
/**
* @ORM\Entity(repositoryClass=OrderStateRepository::class)
* @ORM\Entity @ORM\Table(name="en_order_state")
*/
class OrderState
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id_state;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $id_lang;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $state;我选择使用EntityType,因为我有很多值要显示,而且我可以通过查询来实现这一点。但是,当我提交表单时,我会得到以下错误:

发布于 2022-09-27 08:47:25
我找到了解决方案,我不想在实体的通讯员的表中设置表单的值,所以在表单参数中添加“映射”=> false就足够了。
https://stackoverflow.com/questions/73864278
复制相似问题