Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un problème au niveau de la configuration de mes applications avec Zend Framework,quand j'ai commencé avec ce framework et après la mise en place de mon "bootstrap",je dois à chaque fois spécifier le chemin vers mes classes dans mon contrôleur ou dans d'autre classes par :
require_once('chemin/vers/ma/classe/')
Et je trouve ce problème quand j'utilise plusieurs dossiers pour mes classe (models,forms,...),Après j'ai trouvé une autre méthode et j'explique comment :
voilà le code de mon index.php:
<?php defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); set_include_path(implode(PATH_SEPARATOR, array(realpath(dirname(__FILE__) . '/../library'),get_include_path(),))); defined('ZEND_PATH'); defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); require_once 'Zend/Application.php'; $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini'); $application->bootstrap(); $application->run();
et dans mon bootstrap.php:
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Projet', 'basePath' => dirname(__FILE__), )); return $autoloader; } protected function _initDoctype() { $this->bootstrap('view'); $view = $this->getResource('view'); $view->doctype('XHTML1_STRICT'); } }
et enfin application.ini :
;section production [production] ;configure php (ici l'affichage des erreurs) phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 ;renseigne le répertoire qui contiendra nos propres librairies includePaths.library = APPLICATION_PATH "/../library" ;configure le bootstrap à utiliser bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" ;configure les chemins pour les controllers et les layouts ;le layout est essentiellement utilsé pour le template des pages du site resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" resources.view[] = ;configure l'accès à la base de données resources.db.adapter = "PDO_MYSQL"; resources.db.params.dbname = "DB"; resources.db.params.host = "localhost"; resources.db.params.username = "root"; resources.db.params.password = ""; ;section development, hérite de production (":") [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1
Alors avec la nouvelle configuration je peux créer par exemple une classe dans mon dossier "model(s)"(ici la lettre s est obligatoire) parès on dois créer et nommer la classe qui est dans models/city.php :
class Projet_model_City { }
Alors lui il connait directement que la classe qui est appelé par exemple dans notre contrôleur par "variable = new Projet_model_City()" se trouve dans le dossier models.
Ici je ne sais pas qu'elle est l'utilité du nom "Projet" qui est déclaré comme "namespace" dans mon bootstrap et aussi au début de chaque classe en savant que je n'utilise pas un dossier "Projet" qui contient toute l'application ou qui contient le dossier models( l'arborescence est : Work/application/models(ou forms))donc il n'est pas utile pour l'arborescence(à mon avis).
Voilà c'est mon problème et ce que je souhaite c'est comment je peux mettre ma configuration pour déclarer ma classe de cette façon :
class country_city() { }
Alors qu'il connait directement que la classe city.php dans le dossier "country" lors de la déclaration dans mon contrôleur(cette méthode je l'es déjà vu quelque part mais je ne trouve pas la configuration exacte).
Je souhaite que j'ai bien expliqué mon problème.
Merci.Nll
Hors ligne
Beh, si le suffix 'Projet' , ne te plait pas, tu l'enlèves
$autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => dirname(__FILE__), ));
EDIT :
Non, je dis des bêtises.
Si tu veux pas utiliser les prefix prédéfini dans Module_Autoloader, alors, ne l'utilise pas
Tu n'as rien à déclarer (car tu ne veux pas utilisé de namespace)
Si Counter/City.php est dans ton library_path, ca devrait fonctionner tout seul
Dernière modification par nORKy (14-01-2010 13:55:00)
Hors ligne
Bonjour,
Merci pour votre réponse,ce n'est pas une bêtise du tout,j'ai testé avant mais cela n'as pas marché alors hier j'ai enlevé et j'ai testé encore et cela marche bizarrement,pour votre deuxième solution je la comprends mais je souhaite du code de la configuration.
A+.Nll
Hors ligne