Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-07-2011 21:12:12

thebarbarius
Membre
Date d'inscription: 11-07-2011
Messages: 25

Syteme de modules et chargement de classe

Bonjours,

Code:

Je viens de mettre en place un syteme modulaire qui fonctionne bien.

Sauf que pour la peine, quand je veux cherher une classe sa marche pas avec le message d'erreur qui va avec.

Voici mon Bootstrap principale :

Code:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
        {
            public function run()
            {
                // Cela permet d'avoir la configuration disponible de partout dans notre application
                Zend_Registry::set('config', new Zend_Config($this->getOptions()));
                parent::run();
            }

            protected function _initDefaultNamespace()
    {
        $this->bootstrap('frontcontroller');
        $fc = $this->getResource('frontcontroller');
        $defaultModule = $fc->getControllerDirectory($fc->getDefaultModule());
        
        new Zend_Application_Module_Autoloader(array(
                'namespace' => '', // pas de namespace
                'basePath'  => APPLICATION_PATH . $defaultModule,
            ));
    }
            
            
    protected function _initView()
    {
        // Initialize view
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('Ma premiere application avec Zend');
        $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=ISO-8859-1');
        // Add it to the ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
        $viewRenderer->setView($view);
        // Return it, so that it can be stored by the bootstrap
        return $view;    
    }

}

Donc dans modules/default/controllers/IndexController.php

Code:

<?php
class IndexController extends Zend_Controller_Action
{
    public function init()
    {
       $this->view->headTitle('Mon application avec Zend_Application (Utilisateur par défaut)');
    }

    public function indexAction()
    {
        $this->_response->appendBody('Bievenue');
    }
    
    public function testAction()
     {
     $tuto1 = new Model_Tuto1();
     $this->view->tabTuto1 = $tuto1->find();
     }
}

Et le model Tuto1.php dans modules/default/model/Tuto1.php

Code:

<?php
class Model_Tuto1 {
     private $dbTable;
     private $id;
     private $fr;
     private $en;
    
    public function __construct( $id = false ) {
        $this->dbTable = new Model_DbTable_Tuto1();
        if($id) {
            $tmp = $this->dbTable->getTuto1($id);
            $this->id = $tmp['id_tuto1'];
            $this->fr = $tmp['fr'];
            $this->en = $tmp['en'];
         }
     }
    
     /*
     * GET & SET
     */
     public function getDbTable() {
         return $this->dbTable;
     }
     public function getId() {
         return $this->id;
     }
     public function getFr() {
         return $this->fr;
     }
     public function getEn() {
         return $this->en;
     }
    
     public function setId($id) {
         $this->id = id;
     }
     public function setFr($fr) {
         $this->fr = $fr;
     }
     public function setEn($en) {
         $this->en = $en;
     }
    
     public function add() {
         return $this->dbTable->ajouter(array('fr' => $this->fr, 'en' => $this->en));
     }
    
     public function update() {
         $this->dbTable->maj(array('id' => $this->id, 'fr' => $this->fr, 'en' => $this->en));
     }
    
     public function delete() {
         $this->dbTable->supprimer($this->id);
     }
    
     public function find($tab = false) {
         $results = $this->dbTable->find($tab);
    
         foreach($results as $r)
         {
             $ret[] = new Model_Tuto1($r['id_tuto1']);
         }
    
         return $ret;
     }
}

Donc on voit bien je veux instancier ma classe.
Mais lorque ce je vais sur le site sa dit classe introuvable.

Est un probleme de "autoloader" ?

Comment regler mon probleme ?

Code:

Fatal error: Class 'Model_Tuto1' not found in C:\wamp\www\tuto\application\modules\default\controllers\IndexController.php on line 16

merci

Hors ligne

 

#2 14-07-2011 09:16:27

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Syteme de modules et chargement de classe

Bonjour,

Je pense déjà que ta classe ne porte pas le bon nom. Si elle se trouve dans /application/modules/default/models/ son nom devrait être Default_Model_Tuto1, sauf si ton application.ini contient les informations suivantes :

Code:

; initialize front controller resource
resources.frontController.defaultControllerName = "Index"
resources.frontController.defaultAction = "index"
resources.frontController.defaultModule = "default"
resources.frontController.params.prefixDefaultModule = 0
resources.modules[] = ""

Dans ce cas là, avec prefixDefaultModule à faux, plus besoin de se soucier du nom du module dans default.

Ensuite pour le chargement, tu dois utiliser un bootstrap par module.

Code:

[lang=php]
class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

Et ce pour chaque module (/application/modules/*/Bootstrap.php).

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages