类型

时间:2019-04-06 16:05:19

标签: forms symfony entity

您好,我的模型中有一个名为“ rank”和类型为“ integer”的字段。

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

现在当然对表单进行验证会带来错误:

在属性路径“等级”中给出的类型为“整数”,“ App \ Entity \ ProductType”的预期参数。

如何处理这种情况? 这是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 个答案:

答案 0 :(得分:0)

return (b < a) ? b : a; 从实体(对象)中进行选择,然后返回一个实体(对象)并期望一个实体(对象)。

要更改实体类型的期望值并返回,您可能必须进行一些肮脏的黑客攻击,至少涉及data transformer-您可以将一个附加到表单字段,并在表单和表单字段之间转换数据。获得/返回的值。

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

或者您可以尝试使ChoiceType起作用(我认为这会更容易些,tbh),只需从EntityRepository生成选择即可生成您期望的等级值。