首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性路径"id_carrier“中给定的"int或null”、"object“类型的预期参数

属性路径"id_carrier“中给定的"int或null”、"object“类型的预期参数
EN

Stack Overflow用户
提问于 2022-09-27 08:06:58
回答 1查看 58关注 0票数 0

我正在做一个Symfony 5.4项目,我遇到了一些麻烦。

我已经看过堆叠溢出,但我找不到解决办法!

我有一个问题,因为我已经创建了一个表单,以使搜索栏在我的页面。因此,在表单中有多个输入。在其中的两个输入中,我将使用2个查询显示值(它们是两个独立实体的值,一个来自名为"en_carrier“的表,另一个位于表调用en_carrier中具体而言,此表的ID )。这两个输入必须返回整数值。

注意事项:表单不会与表en_order_state或en_carrier交互,而是与包含这两个表的ID的另一个表交互。

因此,我认为最好的解决方案是为这两者提供一个EntityType,我可以为获取所有的值创建一个特定的查询。

显然,一切都是正确的:标签、名称和价值观。但是,当我提交表单时,我会得到错误。

预期的参数类型为"int或null","object“类型为属性路径"id_carrier".

我如何解决这个问题?

我决定用这样的方式构造我的表格:

代码语言:javascript
复制
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);
    ;
}

这是我在表单中使用的两个实体

承运商

代码语言:javascript
复制
    class Carrier
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id_carrier;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

秩序状态

代码语言:javascript
复制
/**
 * @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,因为我有很多值要显示,而且我可以通过查询来实现这一点。但是,当我提交表单时,我会得到以下错误:

EN

回答 1

Stack Overflow用户

发布于 2022-09-27 08:47:25

我找到了解决方案,我不想在实体的通讯员的表中设置表单的值,所以在表单参数中添加“映射”=> false就足够了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73864278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档