Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Voila je lis depuis quelque temps des livres sur Zend Framework et depuis quelques jours j'ai décidé de m'y mettre..
Cependant je rencontre un problème, voila mon arbo :
application/ --Controllers --Layouts --Models --Views Library Public
dans mon fichier index.php j'ai ce code la :
$paths = array( APPLICATION_PATH . './library', APPLICATION_PATH . '/application/models/', get_include_path() );
Mon fichier index.php j'ai ceci
function indexAction() { $TopSite = new TopSites(); $this->view->topsites = $TopSite->fetchAll(); }
Dans mon fichier models/TopSites.php j'ai ceci :
<?php /** * Class TopSites * * @author Crazy * @version */ class TopSites extends Zend_Db_Table { /** * The default table name */ protected $_name = 'topsites'; }
Lors de l'appel du fichier Index.php, j'ai ce message d'erreur
Fatal error: Class 'TopSites' not found in W:\wamp\www\debutZend\application\controllers\IndexController.php on line 9
Le seul moyen pour que ça fonctionne, c'est de placer include_once(models/Topsites.php) dans mon fichier IndexController.php..
Pouvez-vous m'aider ?
Hors ligne
Salut,
regarde ici
http://julien-pauli.developpez.com/tuto … aders/#LIV
Hors ligne
Merci de ton aide, j'ai utilisé
Zend_Loader::loadClass('TopSites', 'models/TopSites.php');
et ça fonctionne maintenant, mais je vais devoir faire ça a chaque fois ?
Je ne vois pas trop quelle section de la doc me concerne ? celui sur les Namespace ? ou les Resources
Hors ligne
Salut,
Il faut respecter les namespace définit par Zend ou bien définir les tiens.
Par défaut, les noms des classes (et non pas des fichiers) dans le dossier models doivent être préfixés par "Model_", dans ce cas l'autoloader de Zend sera capable de les charger.
Et c'est vrai pour toutes les ressources. Il s'agit en fait d'associer un namespace à un dossier.
Un petit tour dans la source de "Zend_Application_Module_Autoloader" pour voir les ressources définis par défaut.
A+ benjamin.
Dernière modification par Delprog (11-11-2009 09:51:44)
Hors ligne
Dans ton bootstrap, il faut initialiser l'autoloader, en utilisant Zend_Application_Module_Autoloader comme le signale Delprog.
protected function _initAppAutoload() { $autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => dirname(__FILE__), )); return $autoloader; }
si tu fais un Zend_Debug::dump($autoloader); tu verras les namespaces par défaut
Evidemment tu peux changer les namespaces ainsi que les chemins vers tes classes.
A+
Hors ligne
Merci de votre aide,
j'ai donc renommé ma classe Model_Topsites mais ça ne fonctionne toujours pas.
Ensuite pour ce qui est de la fonction dev-k, je n'ai pas de fichier bootstrap.php, tout est dans mon fichier index.php et je ne vois pas vraiment où placer ça ^^
J'ai quand même placer
$autoloader->registerNamespace('Model_'); Zend_Debug::dump($autoloader);
Et je vois bien mon namespace Model_ mais toujours Class not found
Dernière modification par crazycorp (11-11-2009 12:47:58)
Hors ligne
Tu utilises quelle version du ZF ?
A+ benjamin.
Hors ligne
1.9.5 minimal
Hors ligne
Oui oui
Hors ligne
Personne n'a d'idée ?
Hors ligne
Le voila :
<?php error_reporting(E_ALL|E_STRICT); ini_set('display_errors', 1); date_default_timezone_set('Europe/Paris'); define('APPLICATION_PATH' ,"W:/wamp/www/debutZend"); // mise en place des rpertoires et chargement des classes $paths = array( APPLICATION_PATH . './library', APPLICATION_PATH . '/application/models/', get_include_path() ); set_include_path(implode(PATH_SEPARATOR, $paths)); require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); //test $autoloader->registerNamespace('Application_'); $autoloader->registerNamespace('Model_'); //Zend_Loader::loadClass('TopSites', 'models/TopSites.php'); // Chargement de la configuration $registry = Zend_Registry::getInstance(); Zend_Debug::dump($autoloader); // Mise en place de la BDD $params = array( 'host' => '127.0.0.1', 'username' => '', 'password' => '', 'dbname' => '' ); $db = Zend_Db::factory('PDO_MYSQL', $params); Zend_Db_Table::setDefaultAdapter($db); // Mise en place du contrôleur $frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); $frontController->setControllerDirectory('./application/controllers'); Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts')); // run! $frontController->dispatch();
Hors ligne
Déjà si tu utilises la dernière version, tu devrais jeter un coup d'oeil au Quickstart pour commencer un projet avec le zend framework.
La manière dont tu procèdes est correcte mais un peu "vieille". C'est comme ça que l'on procédait il me semble avant la version 1.8 ou 1.7. Mais ça c'est à toi de voir.
http://framework.zend.com/docs/quickstart
Ensuite à la place de
define('APPLICATION_PATH' ,"W:/wamp/www/debutZend"); $paths = array( APPLICATION_PATH . './library', APPLICATION_PATH . '/application/models/', get_include_path() );
préfères
define('APPLICATION_PATH' ,realpath( dirname( __FILE__ ) )); $paths = array( APPLICATION_PATH . '/library', APPLICATION_PATH . '/application/models', get_include_path() );
Essaye ça aussi
$loader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH ));
Hors ligne
Merci pour ta réponse,
pour tes corrections, je voulais savoir ou placer
$loader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH ));
à la place de :
$autoloader = Zend_Loader_Autoloader::getInstance();
?
Je pense que je vais tout recommencer avec le QuickStart alors
Hors ligne
Pages: 1