Ez lenne a Symfony esemény és a feldolgozó metódus:
public function executeUpdate(sfWebRequest $request)
{
$this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
$this->forward404Unless($family = Doctrine_Core::getTable('Family')->find(array($request->getParameter('id'))), sprintf('Object family does not exist (%s).', $request->getParameter('id')));
$this->form = new UpdateFamilyCollectionForm($family);
$this->processForm($request, $this->form);
return sfView::NONE;
}
/**
*
* Process Form
* @param sfWebRequest $request
* @param sfForm $form
* @author BlaBla :)
*/
protected function processForm(sfWebRequest $request, sfForm $form)
{
$sJsonReturnString = "";
$this->setLayout(false);
$form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
if ( $form->isValid())
{
$family = $form->save();
$sJsonReturnString = json_encode(array( "msg"=>"ok" ));
}
else
{
$errors = $form->getErrorSchema()->getErrors();
$aErrors = array();
if (count($errors) > 0)
{
{
$i = 0;
foreach ($errors as $name => $error)
{
$aErrors[ $name ] = $error->getMessage();
}
}
}
$sJsonReturnString = json_encode($aErrors);
}
echo $sJsonReturnString;
} //processForm
Az $errors = $form->getErrorSchema()->getErrors(); visszaadja a hibákat és ezeket írjuk ki a kliensnek.
A kliensen pedig valahogy így dolgozhatjuk fel a kapott értékeket (én most JQuery-t használtam):
var dataString = jQuery('#updatefamilyForm').serialize();
var postUrl = jQuery('#updatefamilyForm').attr('action');
$.ajax({
type: "POST",
url: postUrl,
data: dataString,
success: function(response) {
var FormErrors = $.parseJSON(response);
jQuery.each(FormErrors, function(i, val) {
alert(i+val);
});
}
});
Az űrlapunkat a sablonban a klasszikus Symfony-s módon készítjük el, annyi különbséggel, hogy a form elem kap egy id-t:
<form id="updatefamilyForm" action="<?php echo url_for('family/'.($form->getObject()->isNew() ? 'create' : 'update').(!$form->getObject()->isNew() ? '?id='.$form->getObject()->getId() : '')) ?>" method="post" <?php $form->isMultipart() and print 'enctype="multipart/form-data" ' ?>>
Ezt a problémát sokféleképpen meg lehetne oldani, ez csak egy módszer a sok közül.
0 comments:
Post a Comment