Ошибка формы Fosrestbundle значение не является допустимым типом объекта - PullRequest
0 голосов
/ 25 мая 2020

Я использую FosrestBundle, и в моей форме у меня есть тип сущности для многих отношений.

Я использую почтальон, и я пробовал много разных синтаксисов для проверки формы, но каждый раз эта ошибка: «это значение недействительно» .

{
"form": {
    "children": {
        "email": {},
        "password": {},
        "establishment": {
            "children": {
                "name": {},
                "address": {},
                "postcode": {},
                "city": {},
                "subway": {},
                "description": {},
                "categories": {
                    "errors": [
                        "This value is not valid."
                    ]
                },
                "imageFile": {
                    "children": {
                        "file": {}
                    }
                }
            }
        }
    }
},
"errors": [
    "This value is not valid."
]

}

Если я использую обычную форму (не через API), она проверяет без ошибок!

Есть ли у кого-нибудь решение?

В моей модели у меня есть заведение, которое может иметь столько категорий, сколько захочет.

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', TextType::class)
        ->add('address', TextType::class)
        ->add('postcode', IntegerType::class)
        ->add('city', TextType::class)
        ->add('subway', TextType::class)
        ->add('description', TextareaType::class)
        ->add('categories', EntityType::class, [
            // looks for choices from this entity
            'class' => Category::class,
            'choice_label' => function ($category) {
                return $category->getName();
            },

            // used to render a select box, check boxes or radios
            'multiple' => true,
            'expanded' => false
        ])
        ->add('imageFile', VichImageType::class, [
            'required' => false,
            'allow_delete' => true,
            'asset_helper' => true,
        ])
        ->add('save', SubmitType::class)
    ;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => Establishment::class,
    ]);
}

}

public function createEstablishment(User $user, Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
    $repository = $this->getDoctrine()->getRepository(User::class);
    if ($repository->findOneBy(['email' => $user->getEmail()])) {
        return $this->view(
            "This user already exists", Response::HTTP_CONFLICT
        );
    } else {
        $user = new User();

        $form = $this->createForm(UserEstablishmentType::class, $user, [
            'csrf_protection' => false,
        ]);

        $form->handleRequest($request);

        $form->submit($request->request->all());

        if ($form->isSubmitted() && $form->isValid()) {

            $user = $form->getData();
            $user->setPassword($passwordEncoder->encodePassword($user, $user->getPassword()));
            $user->setRoles(["ROLE_ESTABLISHMENT"]);
            $user->getEstablishment()->setLatitude(48.86788);
            $user->getEstablishment()->setLongitude(2.34718);

            $em = $this->getDoctrine()->getManager();
            $em->persist($user);
            $em->flush();

            return $this->view(
                $user, Response::HTTP_CREATED
            );
        }

        //die(var_dump($form->getExtraData()));

        return $this->view(
            $form->getErrors(true), Response::HTTP_BAD_REQUEST
        );
    }
}

отправлено POSTMAN через RAW в теле:

{
"email": "etablissement.enor@gmail.com",
"password": "etablissement",
"establishment": {
    "name": "etablissement",
    "address": "62 rue du cehmin vert",
    "postcode": 75011,
    "city": "paris",
    "subway": "richard lenoir",
    "description": "etablissement test",
    "categories": [{"id" : 7}]
}

}

Заранее благодарим за любую помощь! :)

1 Ответ

0 голосов
/ 25 мая 2020

Попробуйте изменить формат данных вашего запроса

"categories": [{"id" : 7}] 

на

"categories": [7]
...