Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-01-2009 16:45:01

brissou
Nouveau membre
Date d'inscription: 19-01-2009
Messages: 4

[Zend_Form][1.7.1] Pb avec et loader?? addElementPrefixPath

Bonjour à tous,

Je réalise un formulaire dans le dossier suivant:
application/models/formulaireTest.php

J'ai creé une règle de  validation dans le dossier:
library/PersoValidator/PasswordStrenght.php

Comme je l'ai vu dans des forums j'ai ajouté à mon formulaire le prefix_path:

Code:

$this->addElementPrefixPath('Persovalidator', '../library/Persovalidator', Zend_Form_Element::VALIDATE);

$password->addValidator( new PasswordStrength());

Mon auto complétion m'affiche bien ma classe PasswordStrenght mais qd je teste:

Warning: Zend_Loader::include_once(PasswordStrength.php) [zend-loader.include-once]: failed to open stream: No such file or directory in C:\wamp\www\nzone\Zend\Loader.php on line 83

Warning: Zend_Loader::include_once() [function.include]: Failed opening 'PasswordStrength.php' for inclusion (include_path='.;./library;./application/models/;.;C:\php5\pear') in C:\wamp\www\nzone\Zend\Loader.php on line 83

Fatal error: Class 'PasswordStrength' not found in C:\wamp\www\nzone\application\models\FormulaireUser.php on line 23


Manifestement le loader ne trouve pas ma classe mais je ne vois pas pourquoi :s
J'ai testé à peu pres tt les chemins differents avec des ../../library/Persovalidator
ou meme le chemin absolu mais aucune difference
Avez vous des idées?merci d'avance


Pour info voici ma classe erreur

Code:

<?php
require_once 'Zend/Validate/Abstract.php';
class PasswordStrength extends Zend_Validate_Abstract{
    const LENGTH = 'length';    
        const UPPER = 'upper';
    const LOWER = 'lower';
    const DIGIT = 'digit';
    
    protected $_messageTemplates = array(
        self::LENGTH => "'%value%' doit avoir une longueur d'au moins 8 caractères",
        self::UPPER => "'%value%' doit contenir au moins une lettre majuscule",
        self::LOWER => "'%value%' doit contenir au moins une lettre minuscule",
        self::DIGIT => "'%value%' doit contenir au moins un chiffre"
    );
    
    public function isValid($value){
    $this->_setValue($value);
    $isValid = true;
    if (strlen($value) < 8) {
        $this->_error(self::LENGTH);
        $isValid = false;
    }
    
    if (!preg_match('/[A-Z]/', $value)) {
        $this->_error(self::UPPER);
        $isValid = false;
    }
    
    if (!preg_match('/[a-z]/', $value)) {
        $this->_error(self::LOWER);
        $isValid = false;
    }

    if (!preg_match('/\d/', $value)) {
    $this->_error(self::DIGIT);
    $isValid = false;
    }
    
    return $isValid;
    }
}

Dernière modification par brissou (19-01-2009 16:53:03)

Hors ligne

 

#2 19-01-2009 20:14:45

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: [Zend_Form][1.7.1] Pb avec et loader?? addElementPrefixPath

Mmmh, à première vu, la configuration que tu donnes ne correspond pas au nommage de ta classe.

A savoir :
$this->addElementPrefixPath('Persovalidator', '../library/Persovalidator', Zend_Form_Element::VALIDATE);

La doc dit :
"Just like addPrefixPath(), you must specify a class prefix and a path."

Si tu choisis de pré-fixer tes classes avec 'Persovalidator' alors tes classes doivent s'appeler Persovalidator_NomDeClasse dans le fichier NomDeClasse.php dans le répertoire Persovalidator, sauf erreur de ma part.

Le plus simple et d'ajouter ton répertoire library dans les chemins utilisés par Zend_Loader avec la fonction set_include_path de PHP. Mais il faudra de toute manière pré-fixer ta classe avec Persovalidator_.


Quelques tutoriaux Zend Framework !

Hors ligne

 

#3 19-01-2009 22:33:08

brissou
Nouveau membre
Date d'inscription: 19-01-2009
Messages: 4

Re: [Zend_Form][1.7.1] Pb avec et loader?? addElementPrefixPath

Bonjour Keilnoth et merci pour ta réponse.

J'ai pu trouver ce qui clochait

Pour info voici mon set_incude_path dans mon index:

Code:

// mise en place des répertoires et chargement des classes
set_include_path('.'
    . PATH_SEPARATOR . './library'
    . PATH_SEPARATOR . './application/models/'
    . PATH_SEPARATOR . get_include_path());
include "Zend/Loader.php";
Zend_Loader::registerAutoload();

Et voila ma mofif au nouveau de ma classe

Code:

require_once 'Zend/Validate/Abstract.php';
class Persovalidator_PasswordStrength extends Zend_Validate_Abstract{

j'ai testé ce genre d'add prefix

Code:

$this->addElementPrefixPath('Persovalidator', './library/Persovalidator', Zend_Form_Element::VALIDATE);
$this->addElementPrefixPath('Persovalidator', '../library/Persovalidator', Zend_Form_Element::VALIDATE);
$this->addElementPrefixPath('Persovalidator', '../../library/Persovalidator', Zend_Form_Element::VALIDATE);

Merci de ton aide

Dernière modification par brissou (19-01-2009 22:55:24)

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