0

我正在使用 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}]
}

}

提前感谢您的帮助!:)

4

1 回答 1

0

尝试更改请求数据的格式

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

"categories": [7]
于 2020-05-25T17:38:55.693 回答