Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-01-2010 09:16:21

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

[Résolu] Validateur personnalisé erreur chargement de classe

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();"

Code:

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 :

Code:

--- application
------validators
---------Custom.php

Mon validateur

Code:

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 :

Code:

    
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)

Code:

PATH_SEPARATOR . './application/validators/'

Merci pour votre aide smile 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

 

#2 06-01-2010 10:58:44

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

Salut,

Ton validateur n'est pas situé au bon endroit,

Il devrait être situé dans :

Code:

library
----App
--------Validate

Ton validateur

Code:

class App_Validate_Custom extends Zend_Validate_Abstract
{
   // code etc...
}

N'oublie pas le chargement de la bibliothèque personnalisé dans application.ini

Code:

autoloadernamespaces.0 = "Zend_"
autoloadernamespaces.1 = "App_"

Hors ligne

 

#3 06-01-2010 14:53:37

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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. smile

Merci encore

Dernière modification par m1b (06-01-2010 14:54:09)

Hors ligne

 

#4 06-01-2010 14:59:06

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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

 

#5 06-01-2010 15:57:15

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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)

Code:

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.

Code:

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

Code:

Warning: include(Zend\Validate\DateFr.php)...

Dernière modification par m1b (06-01-2010 16:02:08)

Hors ligne

 

#6 06-01-2010 16:03:21

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

Rajoute cette ligne aussi dans ton fichier ini devant le chargement de Zend_ et de App_

Code:

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

 

#7 06-01-2010 18:26:19

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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

 

#8 06-01-2010 19:12:35

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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

 

#9 07-01-2010 08:16:18

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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

Code:

- library
---App
-----Validate
------Custom.php

Et la classe

Code:

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..)

Code:

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

 

#10 07-01-2010 09:42:36

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

Ton autoload ne marche pas, tu n'as pas besoin de

Code:

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

 

#11 07-01-2010 09:49:33

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Validateur personnalisé erreur chargement de classe

Okay j'enlève ça du validateur.

Le fichier bootstrap.php (vide)

Code:

<?php

// Bootstrap utilisé au démarrage de l'application
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoload()
    {
    }
}

Et le fichier index.php

Code:

<?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

 

#12 07-01-2010 10:02:35

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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. smile

Hors ligne

 

#13 07-01-2010 14:30:29

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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 tongue

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

Code:

application
--- validators
------Datefr.php

dans la classe Datefr.php

Code:

class App_Validate_Datefr extends Zend_Validate_Abstract

dans le bootstrap.php

Code:

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

 

#14 07-01-2010 15:20:12

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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 :

Code:

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 :

Code:

        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath'  => dirname(__FILE__),
            'resourceTypes' => array(
                'app' => array(
                    'path'      => 'library/App/',
                    'namespace' => 'App',
                )
        ));

en supprimant la ligne :

Code:

$autoloader->addResourceType //...

Dernière modification par tylerdurd (07-01-2010 15:20:51)

Hors ligne

 

#15 07-01-2010 16:13:37

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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..

Code:

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 tongue).

Et je pense que ceci ça doit pas être juste

Code:

'basePath'  => dirname(__FILE__),

ça devrait plutôt être (pour qu'il démarre dans library)

Code:

'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

 

#16 07-01-2010 16:25:22

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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é ... roll remplace le

Code:

'path'      => 'library/App/',

par ça :

Code:

'path'      => '../library/App/',

De rien pour ma patience big_smile

Hors ligne

 

#17 07-01-2010 16:37:52

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Validateur personnalisé erreur chargement de classe

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

Code:

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

 

#18 07-01-2010 16:50:40

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

Arf, mais quand tu l'appelles, appelle App_Validate_Datefr et non Zend_Validate_Datefr ...

Code:

->addValidator(new App_Validate_Datefr())

J'espère que ce coup si, c'est la bonne wink

Dernière modification par tylerdurd (07-01-2010 16:52:04)

Hors ligne

 

#19 07-01-2010 16:58:31

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Validateur personnalisé erreur chargement de classe

Sincèrement je suis croulé de rire.....

Mais je suis débile profond là tongue 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 tongue

Bon, bilan je te remercie pour ton suivi tu m'as bien aidé smile

Hors ligne

 

#20 07-01-2010 17:05:20

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Validateur personnalisé erreur chargement de classe

ça fou les boules quand tu perds du temps sur une erreur aussi pitite smile

Le principal est que ça marche au final wink

De rien pour le suivi / aide c'est le but du forum aussi, bonne continuation !

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