【问题标题】:Fosrestbundle form error the value is not valid entitytypeFosrestbundle 表单错误 value is not valid entitytype
【发布时间】:2020-05-25 10:29:09
【问题描述】:

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

}

提前感谢您的帮助! :)

【问题讨论】:

    标签: symfony4 fosrestbundle symfony-validator


    【解决方案1】:

    尝试更改请求数据的格式

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

    "categories": [7]
    

    【讨论】:

    • 首先,感谢您花时间回答,不幸的是我已经尝试过了。它确实说:预期的 App/entity/{entityName},给定整数。我想知道是否有任何与我正在使用 fosrest 的 paramconverter 的事实有关。 @ParamConverter("entityName", converter="fos_rest.request_body")
    • @Elmago 转储你的请求数据,$request->request->all(),categories 数组是否只包含整数?
    猜你喜欢
    • 1970-01-01
    • 2018-05-24
    • 2022-06-21
    • 2011-10-20
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2022-12-11
    相关资源
    最近更新 更多