Неправильный ожидаемый аргумент типа - PullRequest
0 голосов
/ 06 апреля 2019

Здравствуйте, в моей модели есть поля с именем "rank" и типом "integer".

В моем 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 Ответ

0 голосов
/ 06 апреля 2019

EntityType делает тип выбора из сущностей (объектов) и возвращает сущность (объект) и ожидает сущность (объект).

, который изменяет ожидаемый и возвращаемый тип объекта, вам, вероятно, придется выполнить грязный хакер, который включает по крайней мере преобразователь данных - вы можете присоединить его к полю формы, и он преобразует данные между форма и значение, которое она получает / возвращает.

вам может потребоваться предоставить EntityRepositoryManager / EntityRepository преобразователю данных для правильной работы.

Или вы можете попытаться заставить ChoiceType работать (что я предположил бы проще), и просто сгенерировать выбор из EntityRepository для генерации ожидаемых значений ранга.

...