Forse puoi fare validazioni su più campi LATO SERVER anche con ajax.
Se noti nei controller CRUD generati di default da YII c’è questo metodo:
protected function performAjaxValidation($model) {
if (isset($_POST['ajax']) && $_POST['ajax'] === 'tmpl-template-form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
Questo metodo sfrutta il metodo validate del model che è questo:
public static function validate($models, $attributes=null, $loadInput=true)
{
$result=array();
if(!is_array($models))
$models=array($models);
foreach($models as $model)
{
if($loadInput && isset($_POST[get_class($model)]))
$model->attributes=$_POST[get_class($model)];
$model->validate($attributes);
foreach($model->getErrors() as $attribute=>$errors)
$result[CHtml::activeId($model,$attribute)]=$errors;
}
return function_exists('json_encode') ? json_encode($result) : CJSON::encode($result);
}
Un’idea sarebbe modificare quest’ultimo metodo aggiungendoci una validazione multicampo e appiccicarlo al controller così:
protected function performAjaxValidation($model) {
if (isset($_POST['ajax']) && $_POST['ajax'] === 'tmpl-template-form') {
echo self::myValidate($model);
Yii::app()->end();
}
}<br class="Apple-interchange-newline">
public static function myValidate($models, $attributes=null, $loadInput=true)
{
$result=array();
if(!is_array($models))
$models=array($models);
foreach($models as $model)
{
if($loadInput && isset($_POST[get_class($model)]))
$model->attributes=$_POST[get_class($model)];
$model->validate($attributes);
foreach($model->getErrors() as $attribute=>$errors)
$result[CHtml::activeId($model,$attribute)]=$errors;
}
//validazione a più campi
if( !....... ){
$result['general_errors']="errore di validazione multicampo"
}
return function_exists('json_encode') ? json_encode($result) : CJSON::encode($result);
}
Poi nel model metti un’attributo general_errors e nel form aggiungi
<?php echo $form->error($model, 'general_errors ', array('class' => 'clearfix error')); ?>
In questo modo dovresti risolvere LATO SERVER… non l’ho mai provato però
Guarda com’è il metodo per creare le validazioni lato client, magari lo puoi adattare come ho fatto per la parte server.
In ogni caso le validazioni lato client sono inutilizzabili se devi condizionare la validazione con informazioni nel database… se poi ci aggiungi il problema che attivando le validazioni lato client non vengono eseguite quelle lato server … in form complessi di questo tipo la validazione javascript è inutile e inutilizzabile… per non parlare del fatto che un form sicuro alla fine la validazione lato server la deve sempre fare a prescindere dai controlli javascript!