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