Zend : Comment utiliser un model ?

On va voir comment se servir d’un model dans Zend framework. Un model est en fait un objet que vous allez pouvoir utiliser. Il est bien sur possible d’en utiliser plusieurs, et d’appeler un model depuis un autre model. Il est possible d’utiliser dans les models des models du framework zend comme Zend_Registry, Zend_ProgressBar, les Zend_Service_* etc. Il est aussi possible d’étendre une class du framework, comme la class Zend_DB. On peut se reférer a la documentation de Zend.

Cependant, les models doivent respecter une certaine syntaxe pour le nom du fichier, et aussi pour le nom de la class. Si un model est directement dans la dossier models, le nom de fichier devra etre : Nom.php et le nom de class devra etre Nom.
En gros il faut que le nom de class et le nom de fichier soient les memes. Par contre, si la class est dans un sous dossier du dossier model, la il faudra que le nom du fichier soit NomDeFichier.php et que le nom de la class soit NomDeDossier_NomDeFichier.
En gros, il faut mettre devant le nom de la class toute l’arborescense du fichier jusqu’au dossier models.
Enfin il y a une convention qui veut qu’on commence tous les nom de class par des majuscules, ce n’est pas obligatoire, mais en général cela permet de s’y retrouver plus facilement.

Un petit exemple pour comprendre comment instanciser un nouvel objet, et l’utiliser :

<?php
/** Fichier directement dans le dossier models */
class Test1 {

	private $nom;

	public function __construct($nom){
		$this->setNom($nom);
	}

	/**
	 * @param $nom the $nom to set
	 */
	public function setNom($nom) {
		$this->nom = $nom;
	}

	/**
	 * @return the $nom
	 */
	public function getNom() {
		return $this->nom;
	}
}
?>
<?php
/** Fichier dans le dossier "dossier1" qui est fans le dossier models */
class dossier1_Test2 {

	private $nom;

	public function __construct($nom){
		$this->setNom($nom);
	}

	/**
	 * @param $nom the $nom to set
	 */
	public function setNom($nom) {
		$this->nom = $nom;
	}

	/**
	 * @return the $nom
	 */
	public function getNom() {
		return $this->nom;
	}
}
?>
<?php

/**
 * FactureController
 *
 * @author
 * @version
 */

require_once 'Zend/Controller/Action.php';

class FactureController extends Zend_Controller_Action {
	/**
	 * The default action - show the home page
	 */
	public function indexAction() {
		// TODO Auto-generated FactureController::indexAction() default action
	}

	public function ajouterAction(){
		$obj1 = new Test1('http://blog.lyrixx.info');
		$this->view->obj1 = $obj1;
		$obj2 = new dossier1_Test2('http://www.lyrixx.info');
		$this->view->obj2 = $obj2->getNom();
	}

	public function editerAction(){

	}

	public function supprimerAction(){

	}
}
?>
<?php

/**
 * Default home page view
 *
 * @author
 * @version
 */

$this->headTitle('Ajouter une facure');
$this->placeholder('title')->set('Ajouter une facture');

echo $this->obj1->getNom();
echo '<br />';
echo $this->obj2;
?>

On voit bien qu’on peut passer a la vue toute sorte d’objet : un objet, ou le résultat d’une de ses méthodes.

La suite : on avance dans le projet le bootstrap, la connection a la base de donnée.

Vous pouvez aller parcourir le dépôt de code de ce chapitre.

Articles en rapport:

7 thoughts on “Zend : Comment utiliser un model ?

  1. require_once ‘Zend/Controller/Action.php’;

    a quoi sert cette include dans FactureController?
    Je ne l’avais pas mis et sa me mettait :
    Fatal error: Class ‘Test1′ not found in …….applicationcontrollersFactureController.php on line 20

    J’ai ensuite rajouter la ligne mais j’ai la meme erreur…

  2. @Eric « require_once ‘Zend/Controller/Action.php’; » Sert au bon fonctionnement de Zend, Ce tuto était pour Zend 1.7, mais il est toujours d’actualité. Cependant il me semble qu’il soit facultatif.
    Tu utilises quelle version de Zend Framework ?

    Sinon il faut bien respecter la méthodologie que j’ai décrite plus haut dans l’article, pour les noms de class et les nom de fichiers…. Dis moi qu’elle est ton arborescence, et le nom de tes class, je te dirais ou est le pb !

    Si tu suis le tuto, Test1.php doit etre directement dans le Dossier Models, et Test2.php doit etre dans Models/dossier/