Yii Framework Forum: ajouter un model dans le controller par defaut sur l'action index - Yii Framework Forum

Jump to content

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

ajouter un model dans le controller par defaut sur l'action index Rate Topic: -----

#1 User is offline   tanebisse 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 18-February 14
  • Location:France

Posted 22 April 2015 - 09:30 AM

Bonjour,
J'ai besoin d'afficher en continue le resultat d'une valeur contenue en base quelque soit l'action.
J'ai donc tenté dans le SiteController dans l'action index de charger le modèle voulu et de l'ajouter en paramètre du render comme ce ci :
public function actionIndex()
	{
		// renders the view file 'protected/views/site/index.php'
		// using the default layout 'protected/views/layouts/main.php'
		$toto = Parametre::model()->findByAttributes(array('code'=>'TOTO'));
		$this->render('index',array('toto'=>$toto));
	}


Puis dans la page views/layouts/main.php j'ai ajouté àa avant le <html> et le doctype
<?php 
/* @var $this Controller */ 
/* @var $toto Parametre */
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


Puis plus loin dans le code j'ai un affichage du contenu de $toto :
<?php echo $toto->nom ; ?>

Hélas ça ne fonctionne pas quelqu'un aurait-il une idée ?
0

#2 User is offline   RadicalDingos 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 50
  • Joined: 25-July 13

Posted 22 April 2015 - 11:56 AM

Bonjour,

Avant toute chose :
- Ce n'est pas parce que tu mets qqch dans actionIndex que cela va être répercuté dans toutes les actions de ton contrôleur. C'est juste l'action par défaut, celle qui est appelée quand l'action n'est pas précisée.
- Le fait d'ajouter les annotations @var en début de fichier ne sert qu'à assurer l'autocomplétion dans ton IDE, et à faire une sorte de pense-bête afin de connaître les éléments que ton contrôleur passe à la vue sans être obligé d'éditer ton fichier de contrôleur.

Alors je n'ai pas épluché la question mais je vois une solution relativement "propre" :
Si tous tes contrôleurs héritent de la même classe Controller comme c'est le cas par défaut, tu peux rajouter dans cette classe Controller qqch comme :
public $toto;

public function init()
{
    $this->toto = Parametre::model()->findByAttributes(array('code' => 'TOTO'));
}


Cette fonction init s'exécute à l'initialisation de ta classe Controller, ainsi tous tes contrôleurs en profiteront, ainsi que tes vues. Tu pourras donc accéder à ton objet comme ceci dans ta vue :
<?php echo $this->toto->nom; ?>

0

#3 User is offline   tanebisse 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 18-February 14
  • Location:France

Posted 23 April 2015 - 01:54 AM

Oui effectivement j'avais aussi pensé à ça mais je ne voulais pas modifier une classe du framework.
Autrement je crée un nouveau Controller MyController qui étends la classe Controller dans laquelle je surcharge la fonction init() et j'en fais hérité chacune de mes classes Controller.
Sinon merci pour tes autres précisions.

View PostRadicalDingos, on 22 April 2015 - 11:56 AM, said:

Bonjour,

Avant toute chose :
- Ce n'est pas parce que tu mets qqch dans actionIndex que cela va être répercuté dans toutes les actions de ton contrôleur. C'est juste l'action par défaut, celle qui est appelée quand l'action n'est pas précisée.
- Le fait d'ajouter les annotations @var en début de fichier ne sert qu'à assurer l'autocomplétion dans ton IDE, et à faire une sorte de pense-bête afin de connaître les éléments que ton contrôleur passe à la vue sans être obligé d'éditer ton fichier de contrôleur.

Alors je n'ai pas épluché la question mais je vois une solution relativement "propre" :
Si tous tes contrôleurs héritent de la même classe Controller comme c'est le cas par défaut, tu peux rajouter dans cette classe Controller qqch comme :
public $toto;

public function init()
{
    $this->toto = Parametre::model()->findByAttributes(array('code' => 'TOTO'));
}


Cette fonction init s'exécute à l'initialisation de ta classe Controller, ainsi tous tes contrôleurs en profiteront, ainsi que tes vues. Tu pourras donc accéder à ton objet comme ceci dans ta vue :
<?php echo $this->toto->nom; ?>


0

#4 User is offline   tanebisse 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 18-February 14
  • Location:France

Posted 23 April 2015 - 02:13 AM

Oubliez ce que je viens d'écrire j'avais pas vu que la classe Controller se trouvait dans Component !

View Posttanebisse, on 23 April 2015 - 01:54 AM, said:

Oui effectivement j'avais aussi pensé à ça mais je ne voulais pas modifier une classe du framework.
Autrement je crée un nouveau Controller MyController qui étends la classe Controller dans laquelle je surcharge la fonction init() et j'en fais hérité chacune de mes classes Controller.
Sinon merci pour tes autres précisions.

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