Rules in Form

ciao a tutti,

dopo aver fatto un form, vorrei valicate i campi.

Ho messo un campo obbligatorio, e se cerco di fare il Submit “classico”, mi rileva l’errore perché è vuoto.

Se invece faccio con Ajax, non mi rileva l’errore.

Per effettuare una validazione con Ajax, devo fare delle regole "speciali" ? Per il resto mi salva tutto a dovere ajax, quindi è implementato correttamente

Grazie

questo è l inizio della view dove cè la form


 <?php

    $form = $this->beginWidget('CActiveForm', array(

        'id' => 'profilo-form',

        'enableAjaxValidation' => true, //ATTIVO AJAX

        'enableClientValidation' => true, //ATTIVO LA VALIDAZIONE CLIENT

        'focus' => array($model, 'nome'), //DOVE SI POSIZIONA IL CURSORE

            //'clientOptions'=>array('validateOnSubmit'=>TRUE),

            ));

    ?>


<div class="row">

        <?php echo $form->labelEx($model, 'nome'); ?>

<?php echo $form->textField($model, 'nome'); ?>

<?php echo $form->error($model, 'nome'); ?>

    </div>


 <?php

    echo CHtml::ajaxSubmitButton(

            'Submit request', array('welcome/ajax'), array(

        //'type' =>'POST',

        'update' => '#myDiv',

        'type' => 'POST',

        'beforeSend' => 'function(){

      $("#myDiv").addClass("loading");}',

        'complete' => 'function(){

      $("#myDiv").removeClass("loading");}',

            )

    );

    ?>




nel controller


 protected function performAjaxValidation($model) {

     // echo "OK ".$_POST['ajax']."<br/>";

      //  echo "OK ".$_POST['ajax']."<br/>";

        

        if (isset($_POST['ajax']) && $_POST['ajax'] === 'profilo-form') {

            echo CActiveForm::validate($model);

            Yii::app()->end();

        }else{

            echo "NO";

        }

    }


    public function actionAjax() {


        echo "salvo";   

        $model = new Profilo;

        $model->tbl_users_id = Yii::app()->user->id;

       $this->performAjaxValidation($model);

        // uncomment the following code to enable ajax-based validation


        if (isset($_POST['Profilo'])) {

            $model->attributes = $_POST['Profilo'];

            //echo "===>".$model->save();

            if ($this->salvo_db($model, $this->check_esistenza_utente())) {

                echo"Salvato nel DB";

                //$this->redirect('profilo');

            }

        }

    }

e nel model come regola ho:


array('nome','required'),

così facendo mi arriva sempre all’echo Salvato nel DB. anche se lascio bianco nome

sembra che non mi entri mai in


        if (isset($_POST['ajax']) && $_POST['ajax'] === 'profilo-form') {



sara perche usi il ajaxSubmitButton… io non lo mai usato nei form…

Per vedere che dati manda il ajax request e epr vedere cosa viene restituito dal ajax request devi usare un programa come firebug

grazie, se faccio


echo CActiveForm::validate($model);

mi stampa correttamente l’errore Nome cannot be blank.

sto usando Firebug, e quando faccio Submit mi restituisce 302 Found

In firebug… guarda la console view… e li che puoi vedere che dati sono stati mandati e quali sono stati ricevuti

ho due chiamate a una Post e una Get a /welcome/Ajax

e mi stampa quello che c’e nell’else

possibile che il problema sia


if (isset($_POST['ajax']) && $_POST['ajax'] === 'profilo-form') {

quello che ho per il submit non ajax è questo


 $model = new Profilo;

       

       if (isset($_POST['Profilo'])) {

            $model->attributes = $_POST['Profilo'];

            $model->tbl_users_id = Yii::app()->user->id;

            if ($model->validate()) {

                echo"Valida " . $model->tbl_users_id;

                $this->salvo_db($model, $this->check_esistenza_utente());


                // form inputs are valid, do something here

                //return;

            }

        }

        

        $this->render('profilo', array('model' => $model));

e funziona correttamente

Con firebug puoi vedere che dati sono statti mandati… hai guardato se che la variabile "ajax" e se ha il valore "profilo-form"

Una cosa non capisco… nella view usi il ajaxSubmitButton() - vuol dire che tutto viene mandato tramite ajax… e poi scrivi "per il submit non ajax"…

ciao e grazie per la risposta

Il non Ajax lo tengo come test, per vedere che il form funzioni.

Questo è quello che mi viene in Firebug, la variabile ajax effettivamente non la vedo, ma come faccio a impostarla?

Grazie ancora

Appena carico la pagina la console mi dice:

L’utilizzo di getAttributeNodeNS() è deprecato. Al suo posto utilizzare getAttributeNS().

se al posto di


        if (isset($_POST['ajax']) && $_POST['ajax'] === 'profilo-form') {



metto


if (isset($_POST['Profilo'])) {

diciamo che funziona, anche se non mi da l’allert come il submit normale, ma mi fa l’echo dell’errore

come faccio a impostare


        if (isset($_POST['ajax']) && $_POST['ajax'] === 'profilo-form') {

e inoltre è possibile far stampare gli errori come quando faccio il submit normale?

ovvero


<?php echo $form->errorSummary($model); ?>

Grazie mille

il valore ajax e setato nel codice jquery.yiiactiveform.js… vedi se questo file e stato incluso…

per farla breve… prova a fare il CRUD del tuo modelo con Gii… alla form generata aggiungi "enableAjaxvalidation" => true e vedi come funziona…

ciao e grazie del tuo tempo.

Ho fatto cme hai detto e ho creato un CRUD e tutto sembra andare.

il js lo chiama, e lo chiama anche nella mia pagina. devo aver fatto qualcosa di sbagliato nella mia pagina, ora cerco di analizzare le differenze.

La differenza è che nel CRUD viene chiamato


CHtml::submitButton

e di conseguenza viene caricata una pagina, ma quello che vorrei io , è che tutto sia fatto come fa


CHtml::ajaxSubmitButton

ti faccio sapere se ho risolto

molto gentile