表单不会从Request获取值

时间:2018-03-07 12:47:03

标签: php symfony

我不知道我做错了什么。 我想我的确完全像我的表格类:

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”。

1 个答案:

答案 0 :(得分:0)

首先,您的方法createAction中没有$ this-> render()。

我认为你用控制器功能调用你的控制器:

{{ render(controller( ... )) }}

如果是这种情况,请使用MasterRequest

$form->handleRequest($this->get('request_stack')->getMasterRequest());