duansengcha9114 2014-12-13 17:52
浏览 20
已采纳

表格未在Symfony方面验证,可能出现什么问题?

I have this code in my controller:

/**
 * @Secure(roles="IS_AUTHENTICATED_FULLY")
 * @Route("/rpni/registro/producto/1/guardar", name="productoGuardarPasoUno")
 * @Method("POST")
 */
public function guardarPaso1Action(Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $session = $request->getSession();
    $response['success'] = false;
    $status = 400;

    if ($request->isXmlHttpRequest()) {
        $productoSolicitudRequest = $request->request->get('productoSolicitud');
        $entProductoSolicitud = $em->getRepository("AppBundle:ProductoSolicitud")->find($session->get('productoSolicitudId'));

        $entProducto = $em->getRepository("AppBundle:Producto")->find($productoSolicitudRequest['producto']['nombre']);
        $entCondicionProducto = $em->getRepository("AppBundle:CondicionProducto")->find($productoSolicitudRequest['condicion_producto']);
        $entFinalidadProducto = $em->getRepository("AppBundle:FinalidadProducto")->find($productoSolicitudRequest['finalidad_producto']);
        $entProcedenciaProducto = $em->getRepository("AppBundle:ProcedenciaProducto")->find($productoSolicitudRequest['procedencia_producto']);
        $entSolicitudUsuario = $em->getRepository("AppBundle:SolicitudUsuario")->find($session->get('solicitudUsuarioId'));

        if ($entProductoSolicitud)
        {
            $entProductoSolicitud->setProducto($entProducto);
            $entProductoSolicitud->setCondicionProducto($entCondicionProducto);
            $entProductoSolicitud->setFinalidadProducto($entFinalidadProducto);
            $entProductoSolicitud->setProcedenciaProducto($entProcedenciaProducto);
            $entProductoSolicitud->setSolicitudUsuario($entSolicitudUsuario);

            try {
                $em->flush();
            } catch (\Exception $e) {
                $response['error'] = $e->getMessage();
                return new JsonResponse($response, $status);
            }
        } else {
            $newEntProductoSolicitud = new Entity\ProductoSolicitud();
            $formProductoSolicitud = $this->createForm(new Form\ProductoSolicitudForm(), $newEntProductoSolicitud);

            if ($formProductoSolicitud->isValid())
            {
                try {
                    $em->persist($newEntProductoSolicitud);
                    $em->flush();

                    $session->set('productoSolicitudId', $newEntProductoSolicitud->getId());
                    $session->set('productoId', $entProducto->getId());
                    $response['success'] = true;

                    // Debug: remover cuando se termine el Bundle
                    $response['productoSolicitudId'] = $session->get('productoSolicitudId');
                    $response['productoId'] = $session->get('productoId');

                    $status = 200;
                } catch (Exception $ex) {
                    $response['error'] = $ex->getMessage();
                    return new JsonResponse($response, $status);
                }
            } else {
                $response['error'] = $this->get('translator')->trans('formularioNoValido');
                $response['formError'] = $this->getFormErrors($formProductoSolicitud);

                return new JsonResponse($response, $status);
            }
        }

        return new JsonResponse($response, $status);
    }
}

Which I'm trying to use for create and for update purposes. When I send the form through Ajax I get this response from Symfony2:

{
   "success":false,
   "error":"formularioNoValido",
   "formError":{
      "producto":{
         "nombre":[

         ]
      },
      "lote":[

      ],
      "procedencia_producto":[

      ],
      "finalidad_producto":[

      ],
      "condicion_producto":[

      ]
   }
}

And nothing else to give me a clue. The weird part is that checking Post tab in Firebug give me this output:

Parameters              application/x-www-form-urlencodedDo not sort
productoSolicitud[_token]   wC_MAeVs7ZAGSpkvLYux6RKrLq46aivxXxiCZr6pNeU
productoSolicitud[condici...    1
productoSolicitud[finalid...    1
productoSolicitud[lote] 11
productoSolicitud[procede...    1
productoSolicitud[product...    4

Source
productoSolicitud%5Bproducto%5D%5Bnombre%5D=4&productoSolicitud%5Bprocedencia_producto%5D=1&productoSolicitud%5Bfinalidad_producto%5D=1&productoSolicitud%5Bcondicion_producto%5D=1&productoSolicitud%5Blote%5D=11&productoSolicitud%5B_token%5D=wC_MAeVs7ZAGSpkvLYux6RKrLq46aivxXxiCZr6pNeU

See the image below:

enter image description here

So, where the error is? Why form is not valid? Any clue? Advise?

  • 写回答

2条回答 默认 最新

  • douzhan8303 2014-12-14 01:16
    关注

    Well, since I found where the issue was I'll answer myself so others won't make the same mistake. At my code I never tell the form to handle the request so there is where the issue is. The code in the else turns in to this:

            } else {
                $newEntProductoSolicitud = new Entity\ProductoSolicitud();
                $formProductoSolicitud = $this->createForm(new Form\ProductoSolicitudForm(), $newEntProductoSolicitud);
    
                $formProductoSolicitud->handleRequest($request);  
    
                if ($formProductoSolicitud->isValid())
                {
                    ...
                } catch (Exception $ex) {
                        $response['error'] = $ex->getMessage();
                        return new JsonResponse($response, $status);
                    }
                } else {
                    ....
                }
            }
    
            return new JsonResponse($response, $status);
        }
    }
    

    That's all, happy coding!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型
  • ¥15 深度学习中的画图问题
  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条
  • ¥15 Python报错怎么解决
  • ¥15 simulink如何调用DLL文件
  • ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
  • ¥30 线性代数的问题,我真的忘了线代的知识了