【发布时间】:2018-08-15 13:56:23
【问题描述】:
我不知道我做错了什么。 我想我做的和我的表单类完全一样:
class ProductType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add("name",TextType::class)
->add("price",IntegerType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Product::class,
));
}
}
在控制器中:
public function createAction (Request $request)
{
$product=new Product();
$form=$this->createForm(ProductType::class,$product);
$response=new JsonResponse();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($product);
$entityManager->flush();
$response->setContent(array('id',$product->getId()));
$response->setStatusCode('201');
}
else{
$response->setData(array('Error','Invalid form'));
$response->setStatusCode('400');
}
return $response;
}
但它不起作用。 $request 确实获得了值,但 $form->handleRequest($request) 什么也不做。
编辑:
new JsonResponse($form) -> {}
$request->get("name") -> ProductName (what I sent)
$request->get("price") -> 13 (what I sent)
$form->getErrors(true,true)) :
FormErrorIterator {#450 ▼
-form: Form {#437 ▼
-config: FormBuilder {#438 ▶}
-parent: null
-children: OrderedHashMap {#439 ▶}
-errors: []
-submitted: false
-clickedButton: null
-modelData: Product {#331 ▶}
-normData: Product {#331 ▶}
-viewData: Product {#331 ▶}
-extraData: []
-transformationFailure: null
-defaultDataSet: true
-lockSetData: false
}
-errors: []
}
“$form->getConfig()->getMethod()”和“$request->getMethod()”也是'POST'。
【问题讨论】:
-
您能否通过在您的 else 部分中返回来添加表单中包含的错误。你可以使用类似的东西:
return new JsonResponse($form)或者你可以 var_dump 它。 -
你能发布你的请求参数的转储吗?你可以发布转储的内容($form->getErrors(true,true))吗?
-
谢谢!它们被添加到主要问题中。
-
您的表单有名称前缀吗?例如产品['名称']
-
不,它说“ProductName”是因为我写了“ProductName”。很抱歉造成混乱。