Yii Framework Forum: Come Eseguire Una Action Di Un Controller Da Un'altro Controller? - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Come Eseguire Una Action Di Un Controller Da Un'altro Controller? Rate Topic: -----

#1 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 20 December 2012 - 04:48 PM

Avrei la strana necessità che un controller chiami una action di un'altro controller (che da in output una stinga frutto di un renderPartial).

Come si fa?

In qualsiasi modo lo faccio, ottengo una pagina bianca, senza uno straccio di errore... non capisco
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 20 December 2012 - 05:16 PM

Mostraci il codice.
0

#3 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 20 December 2012 - 05:39 PM

Io ho un modulo che gestisce le anagrafiche, quando da un altra parte dell'applicazione lavoro con le anagrafiche mi richiamo il controller AnagraficaController, dove ho una funzione statica (nel mio caso caricaesalva) che si occupa di tutto quanto deve fare il controller. il controller è caricato di default negli import del main.php, perché mi farà comodo in qualsiasi parte dell'applicazione.
Ma non so quanto ti possa fare comodo questa soluzione...

forse la tua soluzione potrebbe essere simile a quella di Model::model()->
ovvero una funzione statica che ti permette di creare la classe del controller...
0

#4 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 21 December 2012 - 05:14 AM

io non ho codice da mostrare, sto chiedendo proprio come si fa ad usare una action di un controller dentro un'altra.

Praticamente quello che devo fare è unire in un pdf il risultato di più stampe diverse.
Queste sono tutte, tranne una, frutto di varie action di un controller unico.
Però gli devo accodare l'output di un action di un diverso controller, non vorrei riscrivere del codice... mumble.
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#5 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 21 December 2012 - 05:41 AM

Ti presento la funzione
 $this->forward(route,exit[true/false]);

che fa di bello? esegue il controller chiamato.
Exit ferma tutto dopo la chiamata, come un redirect ma senza cambiare indirizzo
Se invece di true (default) metti false includi il risultato dell'action
L'unica cosa è che devi modificare la tua action originale per fare in modo che al passaggio di una data variabile faccia un renderPartial anzichè un render, altrimenti ti trovi 2 header, 2 menu....

qui la documentazione

edit: non riesco a passargli variabili direttamente, forse bisognerebbe usufruire di session o simile... o forse sono solo io:)

This post has been edited by emafer: 21 December 2012 - 05:55 AM

0

#6 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 21 December 2012 - 11:47 AM

View Postrealtebo, on 21 December 2012 - 05:14 AM, said:

io non ho codice da mostrare, sto chiedendo proprio come si fa ad usare una action di un controller dentro un'altra.

Praticamente quello che devo fare è unire in un pdf il risultato di più stampe diverse.
Queste sono tutte, tranne una, frutto di varie action di un controller unico.
Però gli devo accodare l'output di un action di un diverso controller, non vorrei riscrivere del codice... mumble.


Io credo tu stia facendo un po' confusione con la terminologia. Intuisco che tu debba unire più view, e non più action. Per fare questo, ti suggerisco di fare una view che dentro di se richiami diversi renderPartial(); In questo modo avrai un assemblato di tutte quelle view.
0

#7 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 24 December 2012 - 01:50 AM

si, effettivamente l'effetto finale è di unire il render di due view di due controller diversi.

Ora che ci penso questo so già farlo,

Controllerò se poi la forward fa al caso mio.

Grazie intanto, se trovo un blocco specifico, aggiorno il thread e posto del codice
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#8 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 25 December 2012 - 07:54 AM

Aggiornamento.

Purtroppo non la forward non va bene, restituisce 'void'.

Vediamo se riesco a spiegare la situazione, perchè ancora non ho trovato soluzione, se non la duplicazione del codice, cosa che non voglio fare.


Riassunto: devo poter chiamare una action di un controller da dentro un secondo controller, il quale dovrà usare la stringa ritornata dall'action del primo


segue la versione lunga:




Ho uno UsersController che raccoglie diversi dati usando User::model() e li 'incrocia' live per creare una specie di tabella pivot. Il motivo per cui non uso una vista, è che questa estrazione è configurabile da parte dell'utente, che quindi puo girare e rigirare i dati in svariati modi.

Finita la preparazione dei dati in memoria, viene invocato il render di un container che a sua volta usa il renderPartial per una lista parecchia customizzata e quindi fatta 'a manina' via html, che a sua volta esegue il renderPartial delle varie righe.

Ho poi un ActivityController che a fine mese di permette di stampare in pdf un ventina di pagine di dati presi tutti dalla tabella / modello Activity.

Mi è stato chiesto di accodare al pdf anche una particolare configurazione del report fatto dallo UserController, che sarà fisso.

Quindi necessito da ActivityController di poter eseguire il renderPartial di una delle viste di Activity, e questo so farlo, ma prima gli devo passare ed alaborare tutti i dati presi dal modello User.

Invece di duplicare il codice di User->actionPrintAnaliticalReport(... parametri ...) vorrei inserire un ulteriore parametro, opzionale, alla chiamata. Così se è presente ed è true, invece di usare mpdf per stampare il pdf, fa semplicemente

return $this->renderPartial(... , true); 


Io ho bisogno dentro ad ActivityController di poter fare qualcosa del tipo
 $string .= UserController->actionPrintAnaliticalReport ( ... parametri ..., 'true')
 ....


A seguire mPdf trasforma la stringa in Pdf.
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users