Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Hello à tous,
Je tente de charger un validateur personnalisé dans mon modèle mais en vain. J'obtiens à chaque fois le message suivant lorsque j'appelle mon validateur en faisant "new Default_Validator_Custom();"
Warning: include(Default\Validator\Custom.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\jobbax\library\Zend\Loader.php on line 83 Warning: include() [function.include]: Failed opening 'Default\Validator\Custom.php' for inclusion (include_path='.;./library;./application/models/;./application/forms/;.;C:\php5\pear') in C:\wamp\www\jobbax\library\Zend\Loader.php on line 83 Fatal error: Class 'Default_Validator_Custom' not found in C:\wamp\www\jobbax\application\forms\FormCandidatInscription.php on line 24
Mon validateur est à l'emplacement suivant :
--- application ------validators ---------Custom.php
Mon validateur
class Default_Validator_Custom extends Zend_Validate_Abstract { // code etc... }
Déjà je me demande si c'est obligatoire de mettre dans le boostrap ceci :
protected function _initAutoload() { $loader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Default', 'basePath' => dirname(__FILE__) )); // Ajoute la ressource "validator" dans le namespace par defaut de l'application $loader->addResourceType('validator', 'validators/', 'Validator'); return $loader; }
Ou alors si dans l'index on a ajouté ceci est ce que ça revient au même ? (du fait qu'on a inclus le répertoire il serait capable de détecter "validator" et considérer comme un module à loader)
PATH_SEPARATOR . './application/validators/'
Merci pour votre aide c'est vrai que c'est important de bien comprendre le mécanisme pour arriver à un bon résultat.
Dernière modification par m1b (06-01-2010 14:54:31)
Hors ligne
Salut,
Ton validateur n'est pas situé au bon endroit,
Il devrait être situé dans :
library ----App --------Validate
Ton validateur
class App_Validate_Custom extends Zend_Validate_Abstract { // code etc... }
N'oublie pas le chargement de la bibliothèque personnalisé dans application.ini
autoloadernamespaces.0 = "Zend_" autoloadernamespaces.1 = "App_"
Hors ligne
Hello tylerdurd,
Merci j'ai placé mon validateur dans le répertoire que tu m'as indiqué et cela fonctionne normalement.
Par contre cela fonctionne sans que j'ai eu besoin de mettre les deux lignes dans le fichier ini.
En fait j'étais certain de ne pas devoir mettre ces fichiers dans le le répertoire library, je pensais qu'on ne le touchait jamais vu que c'est la base du framework.
Merci encore
Dernière modification par m1b (06-01-2010 14:54:09)
Hors ligne
De rien !
Ben en fait, tu peux bien mettre ce que tu veux dans le dossier library, en revanche, c'est le contenu du dossier Zend qu'il ne vaut mieux pas toucher, ça permet de pouvoir faire les mises à jour du framework plus facilement.
Le fait de ne pas avoir déclaré ça dans ton fichier .ini est peut-être car tu le charges dans ton Bootstrap ... mais j'espère que dans ton dossier library, tu as bien un dossier Zend (qui contient tout le framework) pour pas que ton nouveau dossier soit mélangé avec ceux de Zend et ton compliquer les mises à jour.
Hors ligne
Ouch bien évidemment j'ai fait ce qu'il ne fallait pas. (pour ça que je me disais les mises à jour ça va être compliqué).
Effectivement il faut que je mette ça sous library/App/Validate (à l'extérieur du répertoire Zend).
J'ai ajouté à mon fichier de config ceci. (c'est bon Zend va bien le lire)
autoloadernamespaces.0 = "Zend_" autoloadernamespaces.1 = "App_"
Mais il me fait toujours l'erreur (j'ai bien garder le préfix "App_" pour la classe et "App" pour le répertoire).
En fait je me demande comment il faut que je lui dise que ce répertoire est à loader automatiquement.
Genre je voulais faire un truc du style mais ça passe pas.
set_include_path('.' . PATH_SEPARATOR . './library' . PATH_SEPARATOR . './application/models/' . PATH_SEPARATOR . './application/forms/' . PATH_SEPARATOR . './library/App/Validate' // ICI LOAD . PATH_SEPARATOR . get_include_path());
Toujours l'erreur, normalement on devrait voir App\Validate\DateFr.php
Warning: include(Zend\Validate\DateFr.php)...
Dernière modification par m1b (06-01-2010 16:02:08)
Hors ligne
Rajoute cette ligne aussi dans ton fichier ini devant le chargement de Zend_ et de App_
includePaths.library = APPLICATION_PATH "/../library" autoloadernamespaces.0 = "Zend_" autoloadernamespaces.1 = "App_"
Si ça ne marche pas, précise ta version du ZF dans un premier temps.
Hors ligne
Le message reste identique pourtant j'ai structuré correctement les répertoires. J'utilise actuellement la version "Zend Framework 1.9.6".
Est-ce qu'il y aurait un autre paramètre qui pourrait avoir un impact (genre dans le bootstrap.php ou l'index.php).
Ce que je ne comprends pas c'est que si je mets autoloadernamespaces.1 = "App_" dans mon fichier .ini ça veut dire que dans le répertoire "App" il sera obligatoire que mon répertoire s'appelle "Validate" (comme dans le standard) sinon ça serait impossible pour Zend à deviner ce qu'il doit loader.
Hors ligne
Il charge les dossiers et il les retrouve en fonction du nom de tes classes.
Par exemple ta class App_Validate_Custom indique à ZF que le fichier de cette classe est situé comme ceci:
--App
----Validate
------Custom.php
Comment as-tu nommé ton fichier dans le dossier Validate, et quel est le nom de la classe que tu as mis en définitif ?
Hors ligne
C'est bizarre en plus je viens encore de regarder la doc ici mais ça passe pas. : http://julien-pauli.developpez.com/tuto … toloaders/
Actuellement j'ai bien cette structure
- library ---App -----Validate ------Custom.php
Et la classe
require_once 'Zend/Validate/Abstract.php'; class App_Validate_Custom extends Zend_Validate_Abstract ...
J'essaie à présent en faisant comme ça. (Ce que je me demande c'est comment il connait le nom du répertoire "Validate" grâce au set_include_path j'imagine..)
set_include_path('.' . PATH_SEPARATOR . './library/' // LE REPERTOIRE EST CONNU . PATH_SEPARATOR . './application/models/' . PATH_SEPARATOR . './application/forms/' . PATH_SEPARATOR . get_include_path()); require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('App_'); // AUTOCHARGEMENT APP_ $autoloader->setFallbackAutoloader(true);
Dernière modification par m1b (07-01-2010 08:18:03)
Hors ligne
Ton autoload ne marche pas, tu n'as pas besoin de
require_once 'Zend/Validate/Abstract.php';
dans ton validateur.
Peux-tu mettre le contenu de ton index.php de public et le contenu de ton Bootstrap s'il te plait, ça facilitera la correction.
Merci.
Hors ligne
Okay j'enlève ça du validateur.
Le fichier bootstrap.php (vide)
<?php // Bootstrap utilisé au démarrage de l'application class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { } }
Et le fichier index.php
<?php //======================== Constantes =========================================== define('APPLICATION_PATH',realpath(dirname(__FILE__) . '/application')); //======================== Load Zend =========================================== // Mise en place des répertoires et chargement des classes set_include_path('.' . PATH_SEPARATOR . './library/' . PATH_SEPARATOR . './application/models/' . PATH_SEPARATOR . './application/forms/' . PATH_SEPARATOR . get_include_path()); require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('App_'); $autoloader->setFallbackAutoloader(true); // Bootstrap require_once dirname(__FILE__).'/application/bootstrap.php'; // Activation des controllers $frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); $frontController->setControllerDirectory('./application/controllers'); Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts')); // Utilisation des helpers pour les controllers Zend_Controller_Action_HelperBroker::addPath('./application/controllers/helpers'); // Création d'une instance de session + passage dans le registre $session = new Zend_Session_Namespace('session', true); Zend_Registry::set('session', $session); //======================== Traductions =========================================== // Fichier de traductions $translate = new Zend_Translate('csv','languages/fr.csv','fr'); $translate->addTranslation('languages/de.csv', 'de'); // Langue par défaut basé sur la session (suite au passage dans index/language/) $translate->setLocale($session->iso); Zend_Registry::set('Zend_Locale',$session->iso); // Obligatoire pour avoir les valeurs/traductions des clés du csv Zend_Registry::set('Zend_Translate',$translate); // Passage de l'objet translate à travers différents composants Zend_Validate_Abstract::setDefaultTranslator($translate); Zend_Form::setDefaultTranslator($translate); //======================== Config =========================================== // Chargement de la configuration $config = new Zend_Config_Ini('./application/config.ini', 'general'); Zend_Registry::set('config', $config); // Mise en place de la BDD $db = Zend_Db::factory($config->db); $db->getConnection()->exec("SET NAMES 'utf8'"); Zend_Db_Table::setDefaultAdapter($db); // Erreurs error_reporting(E_ALL|E_STRICT); ini_set('display_errors', 1); date_default_timezone_set('Europe/Paris'); //======================== Boot =========================================== // Lance l'application $frontController->dispatch();
Hors ligne
Il faut que tu utilises Zend_Application, tu vas passer un peu de temps à migrer vers cette méthode, mais une fois mis en place, tu seras plus tranquille.
Un bon tuto pour t'aider :
http://julien-pauli.developpez.com/tuto … plication/
Bon courage, et n'hésite pas si soucis tu as.
Hors ligne
J'ai passé au travers de son tutorial et ça m'a fait remarquer un premier soucis mon site était en train de fonctionner avec le fichier index.php et .htacces dans le répertoire parent de "application" erreur de débutant
J'ai donc re-modifié en conséquence mais je suis revenu avec le même problème. Perso je préfère garder les informations dans les fichiers .php alors j'ai encore changé ma structure.
Mon but est d'ajouter une ressource avec le bootstrap (car comme ça je peux garder mes classes dans application) , pourtant c'est ultra-simple mais bien sur ça veut pas passer (il arrive pas à inclure le fichier).
Cette fois ci je vais mettre les vrai noms. J'ai testé tellement de combinaisons que je vois vraiment pas ce qu'il serait plus censé de mettre, il me semble que ce qui est inscrit parait correct.
structure actuelle
application --- validators ------Datefr.php
dans la classe Datefr.php
class App_Validate_Datefr extends Zend_Validate_Abstract
dans le bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoloader() { $autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'App_', 'basePath' => dirname(__FILE__), )); $autoloader->addResourceType('validator', 'validators', 'Validate'); return $autoloader; } }
Hors ligne
Ton dossier du validateur n'est pas sité au bon endroit et n'a pas le bon nom.
En fait quand tu as ta classe qui se nomme App_Validate_Datefr :
Cela signifie que ton fichier est situé dans /App/Validate/Datefr.php (respecte les majuscules)
Ce dossier se met dans le dossier library au même niveau que Zend.
En gros tu as :
library --App ----Validate ------Datefr.php --Zend
Hors ton chemin où est situé ton fichier est : /application/validators/Datefr.php
Essaye également de mettre ça dans ton bootstrap à la place :
$autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => dirname(__FILE__), 'resourceTypes' => array( 'app' => array( 'path' => 'library/App/', 'namespace' => 'App', ) ));
en supprimant la ligne :
$autoloader->addResourceType //...
Dernière modification par tylerdurd (07-01-2010 15:20:51)
Hors ligne
Merci en tout cas pour ta patience. C'est un truc de fou.. cette fois j'ai bien mis comme tu m'as dit en respectant bien les majuscules etc..
library --App ----Validate ------Datefr.php --Zend
Le fichier boostrap est bien chargé en plus. mais il me sort à chaque fois le message suivant : Warning: include(Zend\Validate\Datefr.php)
On voit qu'il est dans Zend alors qu'il devrait partir dans App... et peut importe ce que qu'on met dans le bootstrap il veut absolument rester dans Zend (le vilain ).
Et je pense que ceci ça doit pas être juste
'basePath' => dirname(__FILE__),
ça devrait plutôt être (pour qu'il démarre dans library)
'basePath' => dirname(APPLICATION_PATH.'/../'),
Mais ça change rien au problème ^^ je dois avoir la boulet attitude c'est juste un problème d'include en plus....
Dernière modification par m1b (07-01-2010 16:14:56)
Hors ligne
Le fichier boostrap est bien chargé en plus. mais il me sort à chaque fois le message suivant : Warning: include(Zend\Validate\Datefr.php)
On voit qu'il est dans Zend alors qu'il devrait partir dans App... et peut importe ce que qu'on met dans le bootstrap il veut absolument rester dans Zend (le vilain ).
Je comprends pas l'erreur que tu as là ...
En revanche, je me suis trompé ... remplace le
'path' => 'library/App/',
par ça :
'path' => '../library/App/',
De rien pour ma patience
Hors ligne
Harf toujours identique.
D'ailleur même l'éditeur ne parvient pas à accéder (il y a l'avertissement sur la ligne).
On voit bien ma structure : http://img525.imageshack.us/img525/2404/tstd.png
Warning: include(Zend\Validate\Datefr.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\jobbax\library\Zend\Loader.php on line 83 Warning: include() [function.include]: Failed opening 'Zend\Validate\Datefr.php' for inclusion (include_path='.;../library;C:\wamp\www\jobbax\application/models/;C:\wamp\www\jobbax\application/forms/;.;C:\php5\pear') in C:\wamp\www\jobbax\library\Zend\Loader.php on line 83 Fatal error: Class 'Zend_Validate_Datefr' not found in C:\wamp\www\jobbax\application\forms\FormCandidatInscription.php on line 87
Hors ligne
Arf, mais quand tu l'appelles, appelle App_Validate_Datefr et non Zend_Validate_Datefr ...
->addValidator(new App_Validate_Datefr())
J'espère que ce coup si, c'est la bonne
Dernière modification par tylerdurd (07-01-2010 16:52:04)
Hors ligne
Sincèrement je suis croulé de rire.....
Mais je suis débile profond là bien sûr que ça pouvait pas marcher. En fait j'aurais mieux fait de regarder ce que j'étais en train d'écrire.
J'ai mis cette ligne 200 fois en commentaire (j'ai même plus pensé que son préfixe ne collait pas). Bien sur que c'est cette ligne qui fait démarrer dans Zend/xxx
J'étais déjà en train d'analyser les sources du FK
Bon, bilan je te remercie pour ton suivi tu m'as bien aidé
Hors ligne
ça fou les boules quand tu perds du temps sur une erreur aussi pitite
Le principal est que ça marche au final
De rien pour le suivi / aide c'est le but du forum aussi, bonne continuation !
Hors ligne
Pages: 1