Yii Framework Forum: Come utilizzare un application behavior per mantenere la configurazione a runtime - Yii Framework Forum

Jump to content

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

Come utilizzare un application behavior per mantenere la configurazione a runtime Costruire un'applicazione multilingua Rate Topic: ***** 1 Votes

#1 User is offline   Giancarlo 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 242
  • Joined: 20-December 11
  • Location:Turin, Italy

Posted 11 January 2012 - 11:20 AM

In questo tutorial sarà spiegato un metodo per gestire alcune configurazioni a runtime.
La guida si ispira al tutorial originale inglese denominato
How to use an application behavior to maintain runtime configuration

Da quello che ho capito finora il behavior è uno strumento molto potente che ci offre yii ed è bene capirlo a fondo.

Per farlo proveremo a gestire configurazioni lato utente molto diffuse nelle web applicaton, come l'internalizzazione, la lingua e la data che possono cambiare a seconda del paese.

In questo esempio salviamo la lingua selezionata dall'utente in sessione.

1) Creare un file in /protected/components denominato ApplicationConfigBehavior.php contenente questo codice:
<?php
 
/**
 * ApplicationConfigBehavior is a behavior for the application.
 * It loads additional config parameters that cannot be statically 
 * written in config/main
 */
class ApplicationConfigBehavior extends CBehavior
{
    /**
 	* Declares events and the event handler methods
 	* See yii documentation on behavior
 	*/
    public function events()
    {
        return array_merge(parent::events(), array(
            'onBeginRequest'=>'beginRequest',
        ));
    }
 
    /**
 	* Load configuration that cannot be put in config/main
 	*/
    public function beginRequest()
    {
   	if (isset($_POST['lang']))
   			$this->owner->user->setState('applicationLanguage', $_POST['lang']);
   	if ($this->owner->user->getState('applicationLanguage'))
            $this->owner->language=$this->owner->user->getState('applicationLanguage');
        else 
            $this->owner->language='en';
    }
}


2) Questo file dev'essere incluso in /protected/config/main.php. Quindi nell'array bisogna aggiungere:
'behaviors' => array('ApplicationConfigBehavior')


3) Per aggiornare la lingua possiamo utilizzare un widget (da inserire nel layout / main), ad esempio:
/protected/components/LangBox.php

<?php
class LangBox extends CWidget
{
    public function run()
    {
        $currentLang = Yii::app()->language;
        $this->render('langBox', array('currentLang' => $currentLang));
    }
}
?>

/protected/components/views/langBox.php
<?php echo CHtml::form(); ?>
    <div id="langdrop">
        <?php echo CHtml::dropDownList('_lang', $currentLang, array(
            'en_us' => 'English', 'is_is' => 'Icelandic'), array('submit' => '')); ?>
    </div>
<?php echo CHtml::endForm(); ?>

Posted Image Non preoccuparti, è dentro il monitor!

Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
3

#2 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 388
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 11 January 2012 - 12:19 PM

Complimenti sempre chiaro e limpido ;) certo ke hai messo la 4^ !!!
0

#3 User is offline   Giancarlo 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 242
  • Joined: 20-December 11
  • Location:Turin, Italy

Posted 11 January 2012 - 12:30 PM

Sono ancora un novellino e ho molte lacune.
Però quando vedo qualcosa di utile alla comunità,
anche se non ho ancora approfondito completamente l'argomento,
lo riporto ugualmente qui sul forum italiano per aiutare tutti a crescere.
Così che poi, altri possano aggiungere a loro volta il proprio contributo.

Lo trovo un bel metodo didattico di imparare divertendosi.
E spero di leggere / imparare presto qualche vostra scoperta / approfondimento sui behavior Posted Image
Posted Image Non preoccuparti, è dentro il monitor!

Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
1

#4 User is offline   salsero 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 80
  • Joined: 05-September 12
  • Location:Italia

Posted 19 September 2012 - 08:47 AM

View PostGiancarlo, on 11 January 2012 - 12:30 PM, said:

approfondimento sui behavior

Problemino che penso dipenda dal behavior:
ho implementato questa soluzione ed ho provato ad accedere a gii
mi salta il passaggio dell'autenticazione di gii
mi reindirizza al classico login
mi loggo come "demo/demo"
riesco ad accedere a gii senza ancora aver mai inserito la password di gii.

spero di essermi spiegato.. in pratica aggira l'autenticazione di gii :unsure: :unsure: :unsure:
Comunque ottima guida ;) molto utile
0

#5 User is offline   Giancarlo 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 242
  • Joined: 20-December 11
  • Location:Turin, Italy

Posted 19 September 2012 - 09:19 AM

Confermo quanto affermi.
Ho il tuo stesso difetto e non essendomene accorto subito non ne avevo individuato la causa.

Se disabiliti il behavior hai già verificato che gii torni a chiedere la sua password?
Giusto per essere certi che dipenda da questo
Posted Image Non preoccuparti, è dentro il monitor!

Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
0

#6 User is offline   salsero 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 80
  • Joined: 05-September 12
  • Location:Italia

Posted 19 September 2012 - 09:49 AM

View PostGiancarlo, on 19 September 2012 - 09:19 AM, said:

Se disabiliti il behavior hai già verificato che gii torni a chiedere la sua password?

Fatto! Disabilitato il behavior e gii chiede la sua password (tutto torna normale)
0

#7 User is offline   Nicola 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 210
  • Joined: 13-March 11
  • Location:Italy

Posted 19 September 2012 - 11:13 AM

Forse devi prima controllare se l'utente è autenticato in beginRequest e poi controllare/impostare la lingua altrimenti yii ti richiede l'autenticazione.
Ho dato solo un'occhiata di corsa :)
My company: DigiSin
0

#8 User is offline   Giancarlo 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 242
  • Joined: 20-December 11
  • Location:Turin, Italy

Posted 20 September 2012 - 01:56 AM

Teoricamente il beginRequest è il primo evento che viene scaturito quando viene invocata una qualsiasi action del framework.
E per come l'ho capita io, non ha senso il comportamento di gii. Sembra più un bug.
Anche perchè io potrei sviluppare un sito multi lingua che non richieda l'autenticazione, ma solo il cambio di lingua.

Però prova a verificare l'ipotesi di Nicola.
Prova a commentare il codice in questo modo:
public function beginRequest()
{
/*
        if (isset($_POST['lang']))
                        $this->owner->user->setState('applicationLanguage', $_POST['lang']);
        if ($this->owner->user->getState('applicationLanguage'))
            $this->owner->language=$this->owner->user->getState('applicationLanguage');
        else 
            $this->owner->language='en';
*/
}[/size][/color]
[color="#1C2837"][size="2"]

e vediamo se il problema persiste.
Posted Image Non preoccuparti, è dentro il monitor!

Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
0

#9 User is offline   salsero 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 80
  • Joined: 05-September 12
  • Location:Italia

Posted 20 September 2012 - 03:59 AM

View PostGiancarlo, on 20 September 2012 - 01:56 AM, said:


e vediamo se il problema persiste.

persiste ;)
0

#10 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 25 September 2012 - 04:54 AM

Anche io ho lo stesso problema, ma non ci ho mai perso piu' di un decimo di secondo.

Sul server di produzione gii non ci deve essere punto e basta, per cui non e' importante se chiede o meno la password.
0

#11 User is offline   salsero 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 80
  • Joined: 05-September 12
  • Location:Italia

Posted 15 October 2012 - 06:27 AM

View Postzaccaria, on 25 September 2012 - 04:54 AM, said:

Anche io ho lo stesso problema, ma non ci ho mai perso piu' di un decimo di secondo.

Sul server di produzione gii non ci deve essere punto e basta, per cui non e' importante se chiede o meno la password.

Condivido il tuo pensiero ma tu ammetterai che si tratta di un comportamento anomalo.. il mio dubbio è che possa intaccare altro oltre a gii
0

#12 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 15 October 2012 - 07:28 AM

Io ho avuto un problema con l'internazionalizzazione dell'application name.

Se impostate Yii::app()->name a qualcosa di internazionalizzato, l'application ID cambia con l'internazionalizzazione, il che causa diversi problemi (specialmente con le cache e con gli stati).

Se siete in queste condizioni specificate un application id fisso.
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