2013-06-05 111 views
1

我正在尝试为我的表单实施x-editable。为此,需要找到一种方法来更新单一财产基础上的实体。这给我的最大麻烦是如何验证单个数据的方式。据我的理解,setValidationGroup()似乎没有工作(或者我这样做是完全错误的)。下面是我的尝试:单个字段的AJAX表单更新

if ($request->isPost()) { 
    $form->setData($request->getPost()); 
    if($request->isXmlHttpRequest()) { 
     $filters = $form->getInputFilter(); 
     $filters->setValidationGroup(
      $this->params()->fromPost('name') 
     ); 
     $form->setInputFilter($filters); 
    } 
    if ($form->isValid()) { 
     $objectManager->flush(); 
     if ($request->isXmlHttpRequest()) { 
      $response = $this->getResponse(); 
      $response->setStatusCode(Response::STATUS_CODE_200); 

      return $response; 
     } 
    } else { 
     $errors = $form->getMessages(); 
     \Zend\Debug\Debug::dump($errors); 
     die("notvalid"); 
    } 
} 

isXmlHttpReqiest的检查服务的#1目的来缩小审定组只是一个元素和#2发出与x轴工作,具体的反应jQuery的可编辑插件。

当前错误:所有的FormFields都经过验证。我收到一个错误消息,其中有两个必填字段,它们的isEmpty -Validator被调用。

回答

1

我想你打电话setValidationGroup是错误的山姆的方式,这是一个形式的方法,你给它的字段名称的数组

if($request->isXmlHttpRequest()) { 
    $form->setValidationGroup(array(
     'name', 
    )); 
} 
+1

其实事实并非如此。你有两种定义组的方法,一种是数组,另一种是数字或字符串参数'setValidationGroupd('eOne','eTwo','eN')' – Sam

+1

是的,我的主旨是更多地使用形式方法,而不是到输入过滤器之一,而不是实际的参数格式,但我从答案中看到它没有任何区别。 – Crisp

+0

啊,是的,你是真的,没有真正注意到这一点。最后一个例子也使用了你刚才提到的形式! – Sam

1

溶液

学习吓坏正确设置你的inputFilters。我不知道为什么我没有得到任何解析错误,但在获取正确的inputFilters时出现字符串错误,所以实际上根本没有附加inputFilter。

由于表单具有有效的默认数据,因此在验证单个元素时仅发生错误。

精华

开始编写单元测试....