Yii Framework Forum: Validare Un Campo, Ma Farlo Nell'intera Applicazione - Yii Framework Forum

Jump to content

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

Validare Un Campo, Ma Farlo Nell'intera Applicazione Rate Topic: -----

#1 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 330
  • Joined: 10-April 12

Posted 15 February 2013 - 09:38 AM

Salve a tutti, vi sottopongo il mio problema. Utilizzo il modulo yii-user per le utenze,
l'autenticazione la faccio tramite un servizio wsdl, una volta che mi dice che l'utente è autenticato, io mi salvo nella mia tabella i campi che mi restituisce il servizio che ahimè non sono abbastanza per il funzionamento intero della mia app.
Ad ogni login controllo se il campo che mi interessa è stato selezionato dall'utente al momento del completamento del profilo, altrimenti lo dirotto nella view profile/edit (ma da lì l'utente è libero di uscire cliccando negli altri menu).

Tutto questo ovviamente funziona.
Ed ora veniamo alla questione:
io voglio poter controllare globalmente che questo campo è stato scelto dall'utente,
altrimenti lo dirotto nuovamente nella view suddetta.

Che strada mi consigliate?
0

#2 User is offline   sensorario 

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

Posted 15 February 2013 - 11:13 AM

"ahimè non sono abbastanza per il funzionamento intero della mia app" non puoi aumentarli?
0

#3 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 330
  • Joined: 10-April 12

Posted 15 February 2013 - 11:26 AM

no il webservice non dipende da me. e poi comunque quella è una impostazione che conosce l'utente non chi da il servizio.
0

#4 User is offline   sensorario 

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

Posted 16 February 2013 - 04:20 AM

Potresti estendere la classe WebUser e dotarla di un metodo che controlli la validità del profilo. Oppure usare i filters per controllare l'accesso di un intero controller. O anche semplicemente assegnare ad una porzione di sito un permesso che si può acquisire solo al completamento di quel form.
0

#5 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 330
  • Joined: 10-April 12

Posted 16 February 2013 - 06:51 AM

Sto già dotando WebUser di questo controllo, il problema è quando l'utente interagisce con diverse azioni di diversi controller. Volevo vedere se c'era un modo per estendere il controllo a livello di applicazione in generale, al posto di fare la stessa verifica per ogni controller interessato.
Quindi, prima di scrivere dell'altro codice ho preferito chiedere qui nel forum, magari qualcuno aveva affrontato
una questione similare.
0

#6 User is offline   emafer 

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

Posted 16 February 2013 - 08:47 AM

mmm
forse nn ho capito w quindi hai già affrontato la cosa, ma non puoi semplicemente fare un user->setstate('parametro',valore); e mettere in session il valore una volta che l'utente ha eseguito il form?
0

#7 User is offline   sensorario 

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

Posted 16 February 2013 - 09:20 AM

Se devi fare si che molti controlli devono fare cose in comune puoi agire in diversi modi. Se uso php5.4 puoi usare i traits, altrimenti puoi semplicemente creare una classe ponte tra Controller ed i controller che devi modificare.
0

#8 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 330
  • Joined: 10-April 12

Posted 17 February 2013 - 05:25 PM

Soluzione attuale,
in HomeController:
public function beforeAction($action)
{
   if(is_null(Yii::app()->user->campo_id)){
     Yii::app()->user->setFlash('error', 'Selezionare il campo richiesto.'); 
     $this->redirect(Yii::app()->createUrl('user/profile/edit'));
   }
   else
     return parent::beforeAction($action);
}


una possibilità è estendere Controller e metterci uno snippet di questo tipo, per non replicare il codice inutilmente. Voi che dite?
0

#9 User is offline   sensorario 

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

Posted 19 February 2013 - 10:07 AM

La mia filosofia è "se funziona, dico che va bene". Ma poi sono anche pignolo e ti dico che forse puoi scrivere anche in questo modo:

(non serve mettere l'else: il redirect termina con una die ed il codice successivo non verrà mai eseguito.)
public function beforeAction($action)
{
   if(is_null(Yii::app()->user->campo_id)){
     Yii::app()->user->setFlash('error', 'Selezionare il campo richiesto.'); 
     $this->redirect(Yii::app()->createUrl('user/profile/edit'));
   }

   return parent::beforeAction($action);
}

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