我正在使用 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}]
}
}
提前感谢您的帮助!:)