symfony1.4 - ajax表单和验证

时间:2013-05-09 09:16:21

标签: jquery ajax symfony1 symfony-1.4

我正在尝试使用AJAX在jQuery Dialog中创建表单以保存一些数据。

我目前正在diaog中显示表单,这很好。

我有我的行动:

  $this->folderForm = new FolderForm(array(),array('user_template'=>$user_template));

  if ($request->isXmlHttpRequest()) 
  {
    if($request->isMethod('post'))
    {
        $this->folderForm->bind($request->getParameter('folder'));
        if($this->folderForm->isValid())
        {
            $values = $this->folderForm->getValues();

        } 
    }
  }

以上似乎工作正常。

问题是,如果表单通过AJAX无效,我如何将表单发布到操作并显示错误消息?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用json dataType发布表单并返回包含有关表单是有效还是包含错误的信息的json响应。 我假设您已经使用jQuery发布表单,因为您正在使用jQuery-UI。

E.g。

// apps\myApp\modules\myModule\actions\action.class.php
public function executeEdit(sfWebRequest $request)
{
    $this->folderForm = new FolderForm(array(), array('user_template' => $user_template));

    if ($request->isMethod(sfRequest::POST) && $request->isXmlHttpRequest()) {
        $this->folderForm->bind($request->getParameter($form->getName()));

        $response = array();
        if ($this->folderForm->isValid()) {
            $folder = $this->folderForm->save();

            $response['errors'] = array();
        } else {
            foreach ($this->folderForm->getErrors() as $name => $error) {
                $response['errors'][] = array(
                    'field' => $name,
                    'message' => $error->getMessage(),
                );
            }
        }

        $this->getResponse()->setContentType('application/json');

        return $this->renderText(json_encode($response));
    }
}

然后在你的javascript中

$.post('/myModule/edit/id/' + id, $('my-form').serialize(), function (j) {
   var length = j.errors.length;
   if (length) {
       for (var i = 0; i < length; i++) {
           console.log(j.errors[i]);
           // Show error
       }
   } else {
       // Show success notification
   }
}, 'json');