Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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:
$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
<?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
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_.
Hors ligne
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:
// 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
require_once 'Zend/Validate/Abstract.php';
class Persovalidator_PasswordStrength extends Zend_Validate_Abstract{j'ai testé ce genre d'add prefix
$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
Pages: 1