Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je voudrais savoir comment s'utilise la fonction d'autoload avec des classes autres que celles de la librairie Zend.
J'ai créer un projet avec la commande
zf create project newProject
afin d'avoir l'arborescence correcte.
Je nomme mes classes suivant où elles se trouvent dans l'arborescence.
Par exemple une classe userModel.php dans application/models/ est nommée Zend_Models_userModel
Je pensais pouvoir me servir facilement de l'autoload en respectant cette convention mais mes classes ne sont pas trouvées. Le code que j'utilise pour chaque en-tête de classe est celui-ci :
require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance(); // avec setFallBackAutoloader(true) ou non c'est pareil
Merci beaucoup
Hors ligne
As-tu regardé les différents tutoriels sur l'autoload 1.8 ? ( ex: http://devzone.zend.com/article/4525-De … Autoloader )
Hors ligne
Oui oui j'en ai regardé plusieurs et c'est d'ailleurs pour ça que je viens là parce que je n'arrive pas à le faire fonctionner.
Etant donné que mes classes commencent toutes par Zend_ j'ai aussi essayé d'utiliser
Zend_Loader_Autoloader::getInstance()->registerNamespace('Zend_');
Mais bon c'est ce qui est déjà fait automatiquement et ça ne marche pas mieux avec...
Hors ligne
Le namespace Zend_ est déjà utilisé par le Framework. Utilises en un autre.
De plus, si tu ne mets pas ton chemin Application/models dans ton include path, ca ne sert à rien d'enregistré un Namespace
Hors ligne
D'accord merci.
Mais en fait je crois que je n'ai pas bien compris comment tout fonctionnait et se lançait.
Je suis un peu perdu dans l'arborescence, je ne vois pas trop ce que fait le bootstrap, comment on le lance; de même avec le fichier index.php et /view/script/index/index.phtml
J'essaye simplement de faire une appli MVC qui affiche les données d'une table MySql pour me familiariser avec le framework mais même avec l'aide de tutos et le livre Zend Framework j'ai du mal...
Si je mets tout mon code dans une classe et que j'instancie cette classe dans le fichier index.php, ça affiche bien ce que je veux.
Donc c'est au niveau du MVC et des outils zend que je bloque.
Voilà ma classe users dans models
<?php require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance(); class Zend_Models_Users { private $db; public function __construct(){ } public function connexion(){ $configFile = 'C:/Program Files/xampp/htdocs//users/application/configs/config.ini'; $config = new Zend_Config_Ini($configFile,'db'); $this->db = Zend_Db::factory($config->database); } public function allUsers(){ $this->connexion(); $query = 'SELECT * FROM user'; $result = $this->db->fetchAll($query); // Zend_Debug::dump($result); return $result; } }
Ma classe monController dans controllers
<?php require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance(); class Zend_Controllers_monController { public function __construct(){ } public function recupUsers(){ $users = new Zend_Models_UsersModels(); foreach($users->allUsers() as $user){ $tab[] = $user['nom']; }; zend_debug::dump($tab); } }
Je n'ai pas encore regardé au niveau de la vue, je me suis contenté dans index.php de ça
<?php require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance(); $a = new Zend_Controllers_monController(); $a->recupUsers();
Enfin mon bootstrap est vide.
Hors ligne
Les débuts avec le Zend Framework sont pas évidents, faut persévérer.
Si tu veux réaliser ta première petite application avec une petite bases de données mysql, tu peux suivre le tutoriel de Rob Allen dispo ici : http://akrabat.com/zend-framework-tutorial/ (compatible 1.8)
Pour le reste il faut faire un petit travail de recherche sur la documentation et les livres disponibles.
Le namespace Zend_ est déjà utilisé par le Framework. Utilises en un autre.
Effectivement, t'as le droit à tout ce que tu veux sauf celui là.
Le bootstrap est un fichier qui va contenir les portions de code utiles à chaque instance de l'application, comme le paramétrage des namespaces, la configuration de l'auto-chargement de classe, etc. Il est appelé par le fichier index.php
Le fichier index.php est le point d'entrée unique de l'application. L'utilisateur de ton appli ne communique qu'avec l'index.php qui se charge de faire circuler la requête.
Il charge l'ensemble des chemins de l'application (via la fonction include path), et prépare la configuration de l'application (via le module Zend_Application qui va aller chercher le fichier /config/application.ini).
Une fois que tous "les paramètres" sont prêts, ce fichier appel le bootstrap puis "dispatch" la requête :
La requête va ensuite circuler via les contrôleurs (répertoire controller), qui effectueront leurs traitements à l'aide de modèles (répertoire models) et afficheront les données à l'écran à l'aide de vues (répertoire view).
Hors ligne
Oki merci pour le tuto.
Par contre ce que je ne comprends pas c'est que si mes classes commencent par Zend_ elles devraient être trouvées par l'autoload par défaut vu qu'il cherche les Zend_ ????
Hors ligne
Non. Ce sont les classes par defaut de Zend qui doivent etres préfixés par Zend_ je crois. Les autres doivent etre préfixées par un namespace personalisé.
Hors ligne