Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à vous
Je rencontre un problème lors de la validation de mon formulaire Zend Form.
Je veux vérifier la validité de la zone de saisie Text « titre ».
Jai redéfini la methode isValid afin d'appeler ma propre classe de vérification (Validate_NameMatch) .
Script du form album.php
<?php
class Application_Form_Album extends Zend_Form
{
public function init()
{
$this->setName('album');
$id = new Zend_Form_Element_Hidden('id');
$id->addFilter('Int');
$artiste = new Zend_Form_Element_Text("artiste", array('size' => 25));
$artiste->setLabel('Artiste')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$titre = new Zend_Form_Element_Text("titre", array('size' => 25));
$titre->setLabel('Titre')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$envoyer = new Zend_Form_Element_Submit('envoyer');
$envoyer->setAttrib('id', 'boutonenvoyer');
$this->addElements(array($id, $artiste, $titre, $envoyer));
}
// Redefinition de la methode
public function isValid($data)
{
$titre = $this->getElement('titre');
$titre->addValidator(new Validate_NameMatch('Cramps'));
return parent::isValid($data);
}
}
?>
Voici ma classe de validation NameMatch.php
<?php
class Validate_NameMatch extends Zend_Validate_Abstract
{
const NAME_MISMATCH = 'Le non du disque est accepté';
protected $_compare;
public function __construct($compare)
{
$this->_compare = $compare;
}
protected $_messageTemplates = array(
self::NAME_MISMATCH => "Le nom du disque n'est pas accepté"
);
public function isValid($value)
{
$this->_setValue((string) $value);
if ($value !== $this->_compare) {
$this->_error(self::NAME_MISMATCH);
return false;
}
return true;
}
}
Elle se trouve dans le répertoire Library Validate NameMatch.php
L'instantiation de cette classe semble poser problème (ERREUR 500) lors de l’envoi du
Formulaire.
Voici aussi le fichier application.ini
phpSettings.date.timezone = "Europe/Paris"
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
autoloadernamespaces[] = "Validate_"
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.params.displayExceptions = 1
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 1
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "127.0.0.1"
resources.db.params.username = "root"
resources.db.params.password = "garlouet"
resources.db.params.dbname = "bibliotheque"
resources.db.isDefaultTableAdapter = true
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.view.doctype = "XHTML1_STRICT"
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
Je vous remercie pour votre aide
Hors ligne
Je précice
1) que mon fichier bootstrap est vide
2) ... et que je voudrais savoir, SVP, comment avoir plus d'infos (logs,messages..)
lorsque l'envoi du formulaire n'aboutit pas
Cordialement et grand merci
Hors ligne
Après avoir activé les logs php j'ai trouvé : C'était mon fichier de classe validation
qui était "verrolé" (....manque de ' ou de ; par éxemple)
Maintenant le test marche ....Par contre en cas de controle du titre du disque incorrect (<> 'Cramps) le formulaire n'affiche pas de message d'erreur !!! Il y a juste un POINT
Merci encore
mes classes :
<?php
require_once 'Zend/Validate/Abstract.php';
class Validate_NameMatch extends Zend_Validate_Abstract
{
const NAME_MISMATCH = 'nom titre accepté';
protected $_compare;
public function __construct($compare)
{
$this->_compare = $compare;
}
protected $_messageTemplates = array(
self::NAME_MISMATCH => 'Le nom du disque n est pas accepté'
);
public function isValid($value)
{
$this->_setValue((string) $value);
if ($value !== $this->_compare) {
$this->_error(self::NAME_MISMATCH);
return false;
}
return true;
}
}
?>
<?PHP
class Application_Form_Album extends Zend_Form
{
public function init()
{
$this->setName('album');
$id = new Zend_Form_Element_Hidden('id');
$id->addFilter('Int');
$artiste = new Zend_Form_Element_Text("artiste", array('size' => 25));
$artiste->setLabel('Artiste')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$titre = new Zend_Form_Element_Text("titre", array('size' => 25));
$titre->setLabel('Titre')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$envoyer = new Zend_Form_Element_Submit('envoyer');
$envoyer->setAttrib('id', 'boutonenvoyer');
$this->addElements(array($id, $artiste, $titre, $envoyer));
}
// Redefinition de la methode
public function isValid($data)
{
$titre = $this->getElement('titre');
$titre->addValidator(new Validate_NameMatch('Cramps'));
return parent::isValid($data);
}
}
?>
Hors ligne