Ho un po’ di confusione relativamente alle differenze tra widget e module.
Ho creato un widget attorno a un flash che scatta foto con la webcam (il codice originale è http://code.google.com/p/jpegcam/ ; l’intenzione è impacchettare una extension e pubblicarla). Come potete immaginare il flash chiama un’url per salvare il jpg, una specie di ajax insomma, e attualmente c’è un controller+action che fa il lavoro, però il controller è quello relativo alla view che include il widget.
Volendo impacchettare il tutto come una extension, dovrei fare un module o un widget? A me sembra più sensato il module, perchè mi permetterebbe di includere anche il relativo controller e action per il salvataggio della foto, ma in tal caso come farei a renderizzare la webcam in una view esterna al modulo? Insomma la stessa funzionalità dovrebbe essere disponibile in qualsiasi controller (User, Profile, MySuperPhotoGallery…)
Ok, grazie mille Zaccaria! ci sono quasi… ho seguito How to use a widget as an action provider e sono riuscito ad agganciare il controller del client code alla CAction del widget (in altre parole sono riuscito a riprodurre il risultato del tutorial)
Ora si tratta di passare un parametro alla CAction, nello specifico devo dirgli dove salvare la foto scattata.
ed effettivamente nella CAction riesco a catturare l’id così:
class saveJpg extends CAction{
public function run($id=null){
echo $id;
}
}
Ma non è quello che mi serve: non posso passare il full_path dell’immagine da salvare nell’url… ve l’immaginate che belle url injections si potrebbero fare?
L’url deve rimanere come quella indicata sopra, nel controller Miocontroller devo poter decidere dove salvare e poi passare il nome del file alla CAction. (è anche da escludere che la costruzione del full_path si faccia nella CAction perchè è un widget che si deve poter riutilizzare in ogni applicazione)