错误的预期参数类型

Posted

技术标签:

【中文标题】错误的预期参数类型【英文标题】:Wrong expected argument of type 【发布时间】:2019-08-28 06:33:23 【问题描述】:

我的模型中有一个名称为 rank 且类型为整数的字段。

在我的formType 中,它是一个EntityType,因为我需要这个下拉菜单来选择新条目的顺序(排名)。

现在表单的验证当然会带来错误:

“整数”、“App\Entity\ProductType”类型的预期参数在 属性路径“rank”。

我该如何处理这种情况? 这是 Symfony 4

在模型中,我有字段

/**
 * @ORM\Column(type="integer")
 */
 private $rank;

在我的 formType 中我添加了这个实体

->add('rank', EntityType::class, [
    'class' => ProductType::class,
    'query_builder' => function (EntityRepository $er) 
        return $er->createQueryBuilder('p')->orderBy('p.rank', 'ASC');
    ,
    'choice_label' => function($productType) 
        return 'nach ' . $productType->getNameDe();
    ,
    'choice_value' => function ($productType) 
        return $productType ? $productType->getRank() : '';
    ,
    'placeholder' => 'am Anfang',
])

在控制器中

$productType = new ProductType();
$form = $this->createForm(ProductTypeType::class, $productType);

if ($request->isMethod('POST')) 
            
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid())  /*here it breakes of course*/
        $entityManager = $this->getDoctrine()->getManager();
        
        /*Here I will set the new order (rank) to all my entries later then
          but the Form validation gives me the error*/


        $entityManager->persist($productType);
        $entityManager->flush();

        return $this->redirectToRoute('admin_product_type_index');
    

【问题讨论】:

【参考方案1】:

EntityType 从实体(对象)中选择类型并返回一个实体(对象)并期望一个实体(对象)。

但是,rank 似乎是一个 int。因此与EntityType 期望和返回的内容不兼容。要更改EntityType 的功能,您可能必须进行一些肮脏的黑客攻击,这至少涉及data transformer - 您可以将一个附加到表单字段,它会在表单和它获取/返回的值之间转换数据.

您可能需要向数据转换器提供EntityRepositoryManager/EntityRepository 才能正常工作。

使用ChoiceType更容易,只需从EntityRepository 生成choices 即可生成您期望的排名值。

【讨论】:

谢谢Jakumi,我想我试试ChoiceType,非常好的主意

以上是关于错误的预期参数类型的主要内容,如果未能解决你的问题,请参考以下文章

失败/错误:需要'rspec/rails'类型错误:错误的参数类型类(预期模块)Rspec V3

我有 3 个错误:预期为 ")" ,预期为表达式,long 类型的参数与 U32 类型的参数不兼容

错误“[User]类型的值'无法转换为预期的参数类型'User”错误的解决方案是啥?

将函数作为参数传递错误:无法将类型“someType.type”的值转换为预期的参数类型“someType”

错误:无法将类型“(_)->()”的值转换为预期的参数类型“(()-> Void)?”

泛型结构的构造函数中的“预期类型参数”错误