2013-05-09 3 views
0

J'essaie de créer un formulaire dans un jQuery Dialog pour enregistrer des données en utilisant AJAX.symfony1.4 - formulaire ajax et validation

J'affiche actuellement le formulaire dans le diaog, ce qui est bien.

J'ai dans mon action:

$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(); 

     } 
    } 
    } 

Ce qui précède semble fonctionner très bien.

Le problème est, comment puis-je publier le formulaire à l'action et afficher les messages d'erreur si le formulaire n'est pas valide via AJAX?

Merci

Répondre

1

Vous pouvez poster le formulaire en utilisant un type de données JSON et renvoyer une réponse JSON contenant des informations indiquant si le formulaire est valide ou contient des erreurs. Je suppose que vous publiez le formulaire avec jQuery puisque vous utilisez 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)); 
    } 
} 

Puis dans votre 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'); 
Questions connexes