Yii2 - Modal popup su _form

Salve,

nella form anagrafica ho diverse textInput (nome, cognome, ecc…) e una dropDownList chiamata id_ruolo

In questa dropDownList carico i dati di una tabella esterna chaimata appunto Ruolo.

E possibile tramite un pulsante di fianco alla dropDownList aprire una finestra modale per inserire o modificare nuovi ruoli.

Inoltra alla chiusura della modale è possibile fare un refresh della dropDownList per visualizzare i dati aggiornati.

Grazie

Ciao Antonio,

se ho ben capito stai usando il modal di bootstrap e ti interessa ricevere l’evento di chiusura del popup.

Se è così il problema è Javascript e non PHP, ovvero:

http://getbootstrap.com/javascript/#modals-events

Nella view:




$this->registerJS( <<< EOT_JS


$('#myModal').on('hidden.bs.modal', function (e) {

  // do something...

})




EOT_JS

);



Ciao Fabrizio,

per la gestione ella modale sto usando bootstrap modal.

La cosa che non riesco a fare è che quando clicco il pulsante salva situato nella form modale, dopo aver salvato i record con Ajax vorrei che si chiudesse la modale e si aggiornasse la dropdown senza il ricarico di tutta la view.

Spero di essermi spiegato.

Ciao

Ciao Antonio,

alla pressione del tasto nella modal puoi fare una chiamata ajax ($.post) per inviare i dati del form e nell’evento di ritorno della chiamata ajax eseguire la chiamata di chiusura della modal, una cosa del tipo:





$('#btnSubmitModal').on('click', function() {

      var url = '....';

      var formData = $('form').serialize();

      $.post(

           url,

           formData,

           function(data) {

                   $('#myModal').hide();

           }

      );

});




Ciao Fabrizio,

riesci a dirmi perchè questa chiamata Ajax va in errore ?

Grazie.

<?php

$js = <<<JS

    &#036;('._addNew').on('click', function(e)


                          { 


                           e.preventDefault();


                           var form = &#036;(this);


                           &#036;.ajax({


                                   type: &quot;POST&quot;,


                                   url: '&quot;.Url::toRoute(&quot;piano/update&quot;).&quot;',


                                   data: form.serialize(),


                                   dataType:&quot;json&quot;,


                                   success: function (result) 


                                               {


                                                   alert(&quot;OK&quot;);


                                                   &#036;('#modal').modal('hide');


                                               },


                                   error: function () 


                                           {


                                               alert(&quot;error&quot;);


                                           }


                                 });


                               


                           }


                    );

JS;

$this->registerJs($js);

?>

public function actionUpdate($id)

{


    &#036;model = &#036;this-&gt;findModel(&#036;id);


    if (&#036;model-&gt;load(Yii::&#036;app-&gt;request-&gt;post()) &amp;&amp; &#036;model-&gt;save()) 


        {


        &#036;model-&gt;refresh();


        Yii::&#036;app-&gt;response-&gt;format = 'json';


        return ['message' =&gt; Yii::t('app','Ok record modificato con successo&#33;'), 'id'=&gt;&#036;model-&gt;id_piano];


        }


    return &#036;this-&gt;renderAjax('update',['model'=&gt;&#036;model]);


}

Il blocco JS è un heredoc e quindi la scrittura dell’url




url: '".Url::toRoute("piano/update")."',



è errata.

Puoi popolare la variabile $urlAjax prima del blocco heredoc "JS"

e poi richiamarla:




$urlAjax = \yii\helpers\Url::toRoute("piano/update");


$js = <<<JS

...


url: '{$urlAjax}',



Verifica il sorgente html che contenga l’url corretto e poi con firebug se c’è qualche errore javascript o nella chiamata ajax.

Ho controllato con con firebug ho quest’errore :

"Il seguente parametro è mancante: id"

Sostituiendo il metodo POST con GET funziona ma

me interessa il Post per fare l’update di tutti i campi in automatico.

Se il metodo actionXXXXX ha un parametro, quel parametro dev’essere passato in GET.

Per evitare l’errore, devi togliere il parametro dal metodo ed recuperarlo tramite

Yii::$app->request->post(‘nome_parametro’);

Ciao a tutti vorrei porre una domanda in questo caso non ci sono in yii2

widgets che ti permettono di fare una cosa simile ?

:unsure: :unsure:

Per qualche strano motivo nonho nulla in POST

hai provato con un




var_dump($_POST);



subito all’interno del metodo actionXXXX ?

Così vedi cosa ti arriva. Fai il controllo con quello che viene inviato dalla pagina web attraverso firebug, così vedi se è il server a non ricevere dalla pagina html oppure c’è qualche errore di interpretazione nella pagina php.