Personnaliser le modèle et le contrôleur
Bonjour
je commence avec Zend pour la mise en place de mon site en respectant la structure MVC.
J'ai suivi le tuto pour débutant sur ce site et tout va pour le mieux. Je cherche à optimiser mon application et pour cela j'ai quelques questions à vous poser.
* Question concernant le modèle qui gère la BD
J'ai bien créé ma classe de table objet héritant de la classe Zend_Db_table avec comme attribut le nom de la table dans ma base de données. Alors j'aimerai le personnaliser en ajoutant des méthodes. En gros faire en sorte que le modèle gère tous les accès à la base en récupérant les enregistrements et tout. Dans ce cas dois-je ajouter toutes mes méthodes dans ma classe de table ?
Voici mon code pour le modèle:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<?php
class Poeme extends Zend_Db_Table
{
protected $_name = 'poemes';
//le reste concerne toutes les méthodes dont j'aurai besoin pour l'appli
public function lister()
{
}
public function lire($id)
{
}
...
} |
* Question concernant le contrôleur
L'idée est que le contrôleur ne fasse aucune requête sql. Tout ce qu'il doit faire c'est juste instancier un objet du type modèle et toutes les actions du controleur utilisent l'objet Modèle instancié. Pour ce faire dois-je déclarer un attribut du type Modele en protected par exemple que j'initialise avec la méthode init() que je réecris?
Voici le code du controleur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
<?php
class PoemeController extends Zend_Controller_Action
{
// Attribut
protected $poeme;
/* Constructeur */
public function init()
{
$poeme = new Poeme();
}
/* Fonction affichant la liste de tous les poèmes */
function indexAction()
{
$this->view->titres = "Mes poemes";
$this->_helper->layout->setLayout('cust');
$result = $poeme->lister(); //appelle la methode lister de l'obejt poeme
$this->view->rez = $result;
}
/* Fonction affichant juste un poeme */
function lireAction()
{
$result = $poeme->lire(1);
$this->view->rez = $result;
} |
Voilà le ce que j'ai implémenté, hélas qui ne marche comme je le souhaite.
Voici le message d'erreur que j'ai
Code:
1 2 3 4
|
Notice: Undefined variable: poeme in C:\wamp\www\site_Patrick\application\controllers\PoemeController.php on line 28
Fatal error: Call to a member function lister() on a non-object in C:\wamp\www\site_Patrick\application\controllers\PoemeController.php on line 28 |
Donc je pense que l'action index n'arrive pas voir l'objet $poeme que je tente d'instancier via la méthode init()
quelqu'un a une idée svp?
global ou passage par référence
Je vous remercie de vos réponses.
Effectivement c'était juste un problème de portée. J'ai relu les cours sur le Php objet et j'ai tout de suite trouvé plusieurs solutions. J'ai opté pour utilisé le mot clé global pour que la variable $poeme soit visible par toutes les fonctions.
Encore merci.
Je bute sur un autre problème j'espère avoir votre aide ( de qualité en tout cas :ccool: ). Je crée un autre sujet et j'espère vous relire.
A bientôt