aggiungere parametri a main.php

Ciao non son riuscito ad aggiungere nel file main.php di protected/config dei mie parametri.

Se provo ad aggiungerci cose del genere




'colorepreferito' => 'rosso',



mi da eccezione dicendo che non esiste quell’attributo nella classe CWebApplication.

A questo punto dovrei ridefinire CWebApplication ma mi sembra che l’unica strada per fare ciò è ridefinire YiiBase e CWebApplication.

YiiBas per cambiare il metodo createWebApplication per fargli generare un’instanza della nuova CWebApplication e CWebApplication per aggiungere i nuovi parametri personali da inserire in config.php.

Il problema è che devo per forza queste nuove classi nelle stesse cartelle dove ci sono le classi padri … o sbaglio?

qualcuno ha capito di cosa parlo e come risolvere? :)

Soluzione poco elegante : mettere nell’index.php $GLOBALS["[color=#008800][size=2]colorepreferito[/size][/color]"]=“rosso”;

… brutto brutto

malgrado il mio inglese indecente mi hanno risposto quà :)

http://www.yiiframework.com/forum/index.php/topic/32113-personal-parameter-into-mainphp/

e se ti facessi un model caricato automaticamente con all’interno le azioni di cui hai bisogno?

è troppo sporca come soluzione?

… come non detto… non avevo visto la tua risposta… bah!

Un’altra strada da percorrere, e che ho percorso diverse volte, è quella di aggiungere attributi alla classe Controller. Ricordiamoci che tutti i nostri controller estendono da essa. Questo significa che mettere un attributo li, significa propagarlo per tutti i controlli. Fatto questo, a questo punto, in ogni controller potremo accedere a tale attributo così: $this->mioAttributo.

Ciao grazie dei consigli. Utilizzare il controller è una buona idea ma la soluzione del post in inglese mi sembra più elegante perchè usa il config nativo di php.

Ho usato quindi la sezione params di main.php

Ho poi suddiviso il main.php in più file per poter gestire il seguente scenario.

L’applicazione che stò pensando deve funzionare in due modalità : modalità web come sito tradizionale e modalità client in cui gira in un webserver locale e si sincronizza con la versione server installata su web (sincronizzazione ancora da concepire!) .

Mi serve praticamente permettere all’utente di avere i dati anche in locale usando una versione client del sito (prima delle funzionalità fornite esclusivamente a pagamento nell’installazione web) in modo da permetterli di mantenere una replica in locale o in caso di dati sensibili non mantenere su web certe cose (esempio fatture)

In più dovrebbe girare in modalità debug o produzione.

Ho frammentato il main.php dividendolo in tre file, uno comune a tutte le situazioni, uno che contiene le direttive per attivare il debug e il terzo che specifica i parametri per far girare l’applicazione in versione web o locale.

Praticamente si crea un main.php che con CMap::mergeArray unisce più sezioni di main.php.




return

	CMap::mergeArray(

		CMap::mergeArray(

				require(dirname(__FILE__).'/main.php'), 

				require(dirname(__FILE__).'/main-dev.php')

		),

		require(dirname(__FILE__).'/web.php')

	);

	// main.php = parametri comuni a tutti

	// main-dev.php = parametri debug

	// web.php = parametri che definiscono la modalità queb inveche che locale



poi creo un’index per ogni scenario che richiama il main.php specifico dello scenario che deve girare (esempio debug in versione web come l’esempio sopracitato) variando la linea dell’index che richiama il main




	$config=dirname(__FILE__).'/protected/config/web-dev.php';



questo index ad esempio lo chiamo index-web-dev.php

A questo punto sembra che il cerchio sia chiuso e tutto funzioni a dovere basta aprire l’url index-web-dev.php invece di index.php ma il problema è che quando nei controller faccio il redirect nella forma




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



Yii redireziona su index.php invece su quello dello scenario voluto index-web-deb.php

Per ovviare al problema senza dover variare tutti i redirect in modo che puntino esplicitamente all’index voluto credo che dovrei ridefinire o il componente CWebApplication o CUrlManager per farli redirezionare sull’index appropriato magari leggendo la sez. params del config ma non ci sono riuscito perchè il redirect avviene ad un livello troppo basso delle classi Yii.

Mi sono arreso e per avviare i singoli scenari uso un solo index.php e cambio di volta in volta la linea che richiama il file main.php.

Non so se quello che scrivo sia utile a qualcuno, nel dubbio condivido… magari avete la soluzione per il redirect intelligente :)

ciao

Se hai due modalità, … potrebbe essere interessante avere anche due ruoli e quindi usare solo un index.php senza redirect ma con utenti che hanno permessi diversi?

Ciao i ruoli e gli utenti sia che giri in locale o su web sarebbero identici (ci sarebbe giusto per sicurezza una password ad hoc per locale e web), è proprio un contesto diverso di funzionamento.

Nel contesto web l’applicazione esporrebbe menu, informazioni e servizi diversi rispetto al contesto locale.

Parlando di sincronizzazione, nel contesto locale sincronizzerebbe solo i dati del singolo utente mentre nel contesto web darebbe servizio di sincronizzazione a tutti gli utenti.

Preferisco fare un’unica webapplication che si adatta al contesto piuttosto che dividere il progetto in due… la maggior parte del codice sarebbe condiviso e dovrei allineare costantemente le modifiche