[POO][MVC] envoyer des objets à la vue
Bonjour,
J'ai laissé une question sur le Forum Conception/POO mais je ne suis pas certain d'y obtenir une réponse car ce forum n'est pas très actif, et parce qu'il y est question de la conception MVC/PHP d'une tuto adapté à mon projet.
Je vais donc essayer de l'expliquer ici à nouveau.
J'ai développé un site Internet en me basant sur le tuto de Julien Pauli. J'ai du me battre pas mal car les concepts sont un peu survolés, mais bon, c'est quand même une bonne base de départ.
On peut y remarquer que les variables sont envoyées à la vue sous la forme d'array qui sont ajoutées à un objet Response sous la forme :
Code:
$this->_response->addVar('var', $array);
où $this->_response est mon instance d'objet Response dans mon contrôleur d'action,
$var est la variable qui sera utilisée dans le fichier vue.php sous la forme
Code:
echo $var['attribut'];
et $array la variable de type array() à afficher, par exemple une occurrence d'une table récupérée par PDO. Eh oui, ici, je ne récupère que des array() avec PDO, comme sur le tuto, puisque je ne peux afficher que ça.
Le but de cette question est le suivant.
J'ai pu remarquer, dans des exemples sur le net ou sur ce site, l'utilisation de la syntaxe suivante pour l'affichage :
Code:
echo $var->attribut
or, avec le système que j'utilise, je ne peux qu'utiliser :
Code:
echo $var['attribut'];
puisque je n'ai que des array à manipuler.
Comment donc, envoyer à ma vue, des objets ? si tant est que c'est la bonne question.
Quels sont les changements à effectuer ? où ? comment ?
Je rappelle ici quelques bouts de code qui sont utilisés :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| <?php
class View {
public function render($file, $assigns = array()) {
extract($assigns);
ob_start();
require($file);
$str = ob_get_contents();
ob_end_clean();
return $str;
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
class Controller_Action {
...
...
public function render($file) {
$this->_response->addVar('config', $_SESSION['config']);
$this->_response->addVar('login', $_SESSION['login']);
$this->_response->addVar('message', $this->_response->getMessage());
$view = new View();
$this->_response->setBody($view->render(VIEWS . '/' .$file, $this->_response->getVars()));
} |
Je n'en met pas plus, mais je peux le faire sur demande.
D'avance merci