Entiendo que por eso no intenta hacer una validación AJAX pues no hace nada.
Otra duda que tengo és si se puede usar CActiveForm con un renderPartial, es decir, cargar el formulario mediante una llamada AJAX. Lo digo porqué entonces creo que tampoco se cargaria la libreria jquery.yiiactiveform.js no?
Pero el enableAjaxValidation ya lo tengo puesto :S
El código del controlador és el siguiente:
<?php
class CrearComentariAction extends CAction{
public function run(){
$this->getController()->layout = false;
$comentari = new NoticiaComentari;
$this->performAjaxValidation($comentari);
if(isset($_POST["NoticiaComentari"])){
$comentari->attributes = $_POST['NoticiaComentari'];
$comentari->save();
$this->getController()->renderPartial('mostrarComentari',array('comentari'=>$comentari));
}
else{
$comentari->id_noticia = $_GET['id'];
$this->performAjaxValidation($comentari);
$this->getController()->renderPartial('crearComentari',array('comentari'=>$comentari));
}
}
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='formComentari')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
}
?>
En cuanto a lo del render partial, a lo que me referia es si al añadir mediante una llamada AJAX el formulario, tambien se añadiria la libreria jquery.yiiactionform.js? Es decir, funcionaria la validación mediante AJAX en un formulario cargado a su vez mediante AJAX?
Estoy usando firedebug para ver que se carga, consultas sql y errores. Lo único que veo en el firedebug es que la libreria no está cargada, pero no da ningún error.
En los assets veo que la libreria está, junto con muchas otras que no uso.
$options = // tus opciones de formulario
$options = CJavaScript::encode($options); // pasar el array a objeto js de configuracion
// registrar
Yii::app()->clientScript->registerScript('formComentari'.uniqueId(),"\$('#formComentari').yiiactiveform($options);");
Ten cuidado con doble binding si usas renderPartial. Yo para eso utilizo formularios normales (en escenarios de AJAX puro y duro) y los valido en cliente (jquery.validate.js) y servidor. Tambien puedes realizar la validacion servidor con attributos del model si sirves los campos de forma que el nombre sea NombreModelo[nombreattributo]
Hola antonio, tengo incluido el yiiactiveform.js, y en EnableAjaxvalidation lo tengo seteado a true, pero al imprimir la variable Post en mi actionCreate, no me aparece ninguna variable ajax, y como consecuencia no me valida mediante ajax, y portanto, solo me valida refrescando la página.
if(isset($_POST['ajax']) && $_POST['ajax']==='registration-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
if(isset($_POST['CrugeStoredUser']))//CrugeStoredUser es el modelo
{
//echo('<pre>'); con estas lineas imprimo todas las variables $POST, y esta solo me imprime los 2 valores del formulario, el mail, y un checkbox
//print_r($_POST);
//echo('</pre>');
//Yii::app()->end();
$model->attributes=$_POST['CrugeStoredUser'];
if($model->validate()){
....
El modelo funciona perfectamente, es un form de registro, pero no funciona ajax…
Me respondo a mi mismo, incompatibilidad con librerías jquery, incluí librerías jquery propias, y no dejaban operar bien a las de yii… ya funciona perfectamente con ajax… Gracias de todos formas!!!
Cristian pinilla, si lees bien plunk lo soluciono quitando las libreriasJ JQuery, es probable que el alla gradados librerias adicionales, lo cual no deja funcionar bien las de YII, esto es porque yii ya integra las librerias Jquery, por lo tanto la solucion es no agregas estas librerias al proyecto.
Perdón por tardar en responder! hace tanto de esto. Claro, el problema era porque usaba una librería jquery, y yii registra sus propios archivos jquery y se estaba haciendo un Lio.