【问题标题】:Form doesn't get values from Request表单没有从请求中获取值
【发布时间】: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”。很抱歉造成混乱。

标签: php symfony


【解决方案1】:

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

我认为你用 twig 函数调用你的控制器:

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

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

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

【讨论】:

  • 为什么要渲染 JsonResponse? (可能由 ajax 调用)
  • 没错,我不希望它“显示”任何东西,只需获取 JsonResponse。还是谢谢!
猜你喜欢
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多