Visualizare un Form in una view di un model diverso

Buongiorno a tutti,

Vorrei visualizzare una Form dentro una view di un model diverso…

mi spiego meglio ,

dentro la view del model pratiche dovrei visualizzare il form del model note ed effettuare le inserti delle note.

Come Posso fare?????

Grazie.

Dentro la view del modello pratiche puoi fare il render() del form note passandogli il modello note che avrai istanziato nel controller delle pratiche, comunque se cerchi ci sono un sacco di esempi che mo non ho il tempo di fare!

Prova e facci sapere

Grazie per la risposta.

ho provato a instanzioare il modello note nel controller delle pratiche ma niente.




class PraticheController extends Controller

{

$modelNote = new Note;


.....

}



nella view pratiche ho fatto cos’ì:




<?php

        $modelNote = new Note; // istanza modello Note


        $this->widget('zii.widgets.jui.CJuiTabs', array(

            'tabs'=>array(

            'note' =>$this->renderPartial("/Note/_form", array('model' => $modelNote), $this),

         

        ),        

        'options'=>array(

            'collapsible'=>true,

        ),

    ));

		

	?>



e riesco a visualizzare la form delle note, ma non mi fa inserisce le note.

Dove Sbaglio???

:( :(

controlla, per fabore, protected/runtime/app.log e guarda se ti dice dove sta l’errore

"Non me le fa inserire" non è chiaro neppure a noi

  • La pagina segnala qualche errore?

  • Oppure a livello ‘php’ sembra tutto ok ma in db non ci finiscono le note?

PS: benvenuto sul forum (vedo hai solo 4 post, ma già sai formattare il codice, ottimo !)

Ciao,

Ho visto i log e non c’è nulla.

No non da nessun errore va liscio come l’olio ma non inserisce nulla.

ps. è normale che se al posto di _form metto create mi da errore??




<?php

        $modelNote = new Note; // istanza modello Note


        $this->widget('zii.widgets.jui.CJuiTabs', array(

            'tabs'=>array(

            //'note' =>$this->renderPartial("/Note/_form", array('model' => $modelNote),

             'note' =>$this->renderPartial("/Note/create", array('model' => $modelNote), 

 $this),

         

        ),        

        'options'=>array(

            'collapsible'=>true,

        ),

    ));

                

        ?>



:unsure:

Per fare il debug in questo caso, in cui penso sia un problema di validation rules del model, abilita il log del sql, compreso dei parametri.

Quindi riprova a fare un inserimento

Ora nel log dovresti vedere che qualcosa non ha funzionato nel settare gli attributi o nel validarli.

Per il discorso _form / create, forse devi solo controllare l’esistenza di create.php invece di _form.php. Delle volte basta uno spazio maledetto o un banale typo per incorrere in questo errore.

Oppure c’è un errore php nel file create.php e tu hai il livello dei warning troppo basso o l’error reporting disabilitato.

Nulla…

Sicuramente sbaglio qualche passaggio.

Se prova a inserire del model note riesco a inserire senza problemi, se provo ad inserire dal model pratiche

instanziando il model note nulla.

Se invece provo ad importare create invece di _form la view cerca di aprire il create del modello pratiche no del modello note




<?php

        $modelNote = new Note; // istanza modello Note


        $this->widget('zii.widgets.jui.CJuiTabs', array(

            'tabs'=>array(

            //'note' =>$this->renderPartial("/Note/_form", array('model' => $modelNote),

             'note' =>$this->renderPartial("/Note/create", array('model' => $modelNote), 

 $this),

         

        ),        

        'options'=>array(

            'collapsible'=>true,

        ),

    ));

                

        ?>



mi da l’errore

La proprietà "Note"."acconto" non è definita.

quindi vuol dire che cerca di prendere la create del modello pratiche nel modello note .

Help me :unsure:

ah !!! ci sono !

Nella action, dentro al controller, devi istanziare, ovviamente sia il model note che il model pratiche

poi uno glielo ha gia passato come ‘model’ => $model, immagino

L’altro passaglielo come ‘pratiche’ => $model_pratiche o similare

poi nella vista devi avere l’accortezza di usare $model o $model_pratiche (o come hai chiamato l’altro) a seconda di su quale dei due model stai agendo

Nel salvare gli attributi, devi poi fare la stessa cosa, cioè salvare i dati di ENTRAMBI i modelli con la sequenza validate() … save()

spero di essermi spiegato bene, :)

Ciao e grazie per le dritte ma sono alle prime armi…

facciamo un passo alla volta

dentro l’action view del modello pratiche o provato a passargli i 2 model così:




public function actionView($id)

	{ $model_note = new Note;

		$this->render('view',array(

			'model'=>$this->loadModel($id),

                        'model_note'=>$model_note,

		));

	}



e nalla view della pratica faccio cos’ì:




$this->widget('zii.widgets.jui.CJuiTabs', array(

    'tabs' => array(

       'note' => $this->renderPartial("//Note/_form", array('model_note' => $mode_note), $this), // modello note

        'Importi' => $this->renderPartial("_importi", array('model' => $model), $this), // modello pratiche

        'Importi Pratica' => $this->renderPartial("praticaImporti", array('model' => $model), $this), // modello pratiche

    ),

    'options' => array(

        'collapsible' => true,

    ),

));



e mi da l’errore: Undefined variable: mode_note

eheh è $model_note non $mode_note ;)

Lol, ho perso cinque minuti a leggere il post, poi c’era Nicola che ha capito subito tutto. Mitico.

Perfetto _form importata,

ora per salvare le note devo richiamare la funzione save()

nel controller pratiche dentro l’action create???




class PraticheController extends Controller

{


public function actionCreate()

	{

		$model=new Pratiche;

                $model_note=new Note;


                     if(isset($_POST['Note']))

		{

		        $model_note->attributes=$_POST['Note'];

			$model_note->save();

		}		

                

                     if(isset($_POST['Pratiche']))

		{

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

			if($model->save())

				$this->redirect(array('view','id'=>$model->id_pratica));

		}


	}


........

}



è corretto o sbaglio qualcosa????

Allora, se ho capito bene, la pagina in questione visualizza la pratica e può editare le note relative, giusto?

Se è così, devi validare e salvare solo le note e se il save delle note è ok, allora procedi col redirect

Se invece devi editare e salvare SIA la pratica che le relative note, allora devi annidare gli if. Cioè:

  • verifichi se ci sono i dati in POST della pratica

  • se è così provi a salvare, mettendo il risultato (booleano) in una variabile

  • se e solo se questo save è andato bene (true), allora verifichi se ci sono i dati in post delle note

  • se è così provi a salvare le note, mettendo questo secondo booleano in una seconda variabile

  • se questo secondo booleano è ok, allora fai il redirect.

Ok Grazie a tutti per l’aiuto.

:D :D :D

se ha funzionato una delle risposte che ricevi, metti il ‘+’ alla risposta

aiuta chi arriva sul forum in cerca della stessa risposta e aiuta la ‘reputazione’ di chi l’ha scritta

Magari usa anche le transazioni.

Se è tutto ok fai il commit, altrimenti il rollback.

Ottima idea Lerstat1968, me ne dimentico sempre