如何将验证错误发送到数组并使用ajax在视图中显示它们?

时间:2014-07-13 03:54:13

标签: php zend-framework zend-framework2 zend-form zfcuser

我正在使用zf2,我是ajax和zf2的新手。 我使用bootstrap模式打开表单作为模态对话框。 我已将初始状态值设置为-1。然后如果保存的数据那么它将变为0.如果没有,它将返回1。 因此,如果表单无效,则返回-1。

我的代码正在运行,但我不知道如何在模态中显示验证错误。

这是我在控制器中的validationAction。

    public function validateinviteAction() {

    $request = $this->getRequest ();
    $data = $_POST ['textData'];

->  $dataform = array('email'=>$data); 
->  $form = new InviteForm ();
->  $validate = new Invite ();
->  $validate->exchangeArray ( $dataform);
->  $form->setInputFilter ( $validate->getInputFilter () );
->  $form->setData ( $dataform );
    $status=-1;
    if ($form->isValid ()) {
            $validate->exchangeArray ( $form->getData () );
            $row = $this->getUsersTable ()->getUserbyemail ( $validate->email );
            $reply = $this->getInviteTable ()->saveInvites ( $validate );
            $status=$reply;
        }

    $result = new JsonModel ( array (
            'status' => $status 
    ) );
    return $result;
}

这是我的ajax代码

$.ajax({
      type: "POST",
      url: "<?php echo $this->url('users', array('action'=>'validateinvite')); ?>",
  ->  data: emailtxt,
      success: function(resp){ 
          if(resp.status==0){
             // if saved successfully
              $("#messagesuccess").text(' The invitation sent successfully.');               
              document.getElementById("email").value = "";

          }
          else if(resp.status==1){
            //if cannot save successfully
              $("#messagefailed").text(' You have already sent an invitation to this person.');
          }
          else{
            //form is not valid // if status==-1
              $("#messagefailed").text(' The provided inputs are not valid.');
          }
      },
      error: function(resp){
          $("#messagefailed").text('Internet connection lost. Try again later.');
      }
});

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,请不要使用$_POST获取数据$data = $_POST ['textData'];

$data = $this->params()->fromPost('textData');

您可以使用以下方法之一从表单中获取错误消息:

$error = $form->getMessages();
//or
$error = $form->getInputFilter()->getMessages()

$result = new JsonModel ( array (
            'status' => $status ,
            'error' => $error
    ) );

并在你的ajax中:

  else{
    //form is not valid // if status==-1
      $("#messagefailed").text(' The provided inputs are not valid.');
      alert(resp.error.join("\n"));//or however u like
  }

更新:

此行是额外的而不是必需的,表单自行执行此操作

$validate->exchangeArray ( $dataform);

使用此代码使用ajax

发送表单数据
data: $('#myForm').serialize()

首先检查请求是否在您的操作中发布

if($this->request->isPost())

然后获取发布数据并设置为表单

$form->setData ( $this->request->getPost());

并验证,如果$form->isValid(),那么只需从表格中获取数据

$data = $form->getData ()