j'ai cette class qui me pose un petit problem

<?php
    /**
    * Index Controller
    */
    class Index extends Controller{
        public $_content = array();
        function __construct(){
            parent::__construct();
            $this->_content"title"] = array("title" => "Welcome to Project");
            $this->_content"description"] = "We provide you the best IT service.";
            $this->vars = $this->_content;
            extract($this->vars);
            $this->render('index');
        }
        /*
        *sample action of signing up
        */
    }
?>

la variable $vars a ete declaree dans Controller comme ceci :

protected $vars = array();

Le probleme est que j'essaye d'acceder aux variable dans ma vue comme ceci et ca me di que la variable title est introuvable:

<?php print $title ?>

2 réponses


negreen
Auteur
Réponse acceptée

Je crois que j'ai retrouvé le problème

la fonction render($view); a ete declare dans le controller parent, et c'est la aussi que la variable $vars a ete aussi declarer. C'est dans la function render() qu'on fait l'inclusion de la vue, donc c'est la il faut extraire nos variables avec extract() avant d'inclure la vue; ET dans les controllers de pages, je n'ai plus qu'a juste initialiser la variable $vars avant l'appel de la function render();

cequi me donnerait un render suivant:

function render($view){
            $file = ROOT.DS."views/".$view.DS.$view.".php";
            extract($this->vars);
            if(file_exists($file)){
                ob_start();
                require_once $file;
                $template_content = ob_get_clean();
                require_once ROOT.DS."views".DS."layouts".DS.$this->_layout.".php";
            }else{
                print "404: la vue n'exist pas";
            }
        }

Et dans mes controller de page je pourrais appler render de cette maniere :

function __construct(){
            parent::__construct();
            $this->vars"title"] = "Welcome to my web site";
            $this->vars"description"] = "We offer you the best IT tutorials on GraphicArt.fr";
            $this->render('index');
        }

ET dans mes vues je peux acceder a ces variables comme suit:

<?php print $title; ?>

C'est pour cette simplicite d'utilisation des variables que j'ai fait usage de la fonction extract() voir Function extract()

OU COMME SUIT :

<?php print $this->vars'title']; ?>

En fait si j'ai choisie la methode d'extraction c'est parce que j'avais l'intention d'utiliser le racourci de la function echo() dans mes vues comme suit:

<?= print $title; ?>

La ca m'eviterais d'avoir trop de print() ou echo().

Merci a vous pour votre participation.

Bonjour,
Je ne sais pas si tu utilises un framework grand public ou un truc perso, mais c'est bizarre. Normalement tu dois avoir une méthode pour envoyer les variables à la vue. La c'est normal que la vue ne trouve pas les variables, car elles sont cloisonnées dans la méthode __construct.

Cordialement,