Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
bonjour,
petite question qui concerne la création d'interface pour des tables liées par une relation n-m, avec table de jointure au milieu
dans le formulaire (d'édition d'un élément) d'une des tables, j'ai mis un élément de type multi-checkbox avec dans le contrôleur un petit traitement qui va créer une donnée dans la table de jointure pour chaque case cochée
mon problème est que j'aimerai obliger l'utilisateur à faire au moins un choix (cocher au moins un truc)
j'ai essayé avec
$monElement->addValidator('NotEmpty');
mais sans effet
y a t il un moyen "propre" de faire cette vérif avec un validateur ? j'ai lu quelque part que pour les élément de types tableau, le validateur ne s'applique pas au tableau mais à chacun des éléments... moi il faudrait que je puisse vérifier une taille minimale pour le tableau
merci par avance
Dernière modification par Dia (29-08-2008 09:44:11)
Hors ligne
tu codes ton propre validateur.
Section 48.4 de la doc du ZF
Hors ligne
<?php require_once 'Zend/Validate/Abstract.php'; require_once 'Zend/Validate/Exception.php'; class Fxc_Validate_ArraySize extends Zend_Validate_Abstract { const TOO_SHORT = 'arraySizeTooShort'; const TOO_LONG = 'arraySizeTooLong'; /** * Nombre minimal d'éléments * * @var integer */ protected $_min; /** * Nombre maximal d'éléments * * N'est pas pris en compte si null * * @var integer|null */ protected $_max; protected $_messageVariables = array( 'min' => '_min', 'max' => '_max' ); protected $_messageTemplates = array( self::TOO_SHORT => "array has less than %min% elements", self::TOO_LONG => "array has more than %max% elements" ); /** * Initialise les attributs * * @param integer $min * @param integer $max */ public function __construct($min = 0, $max = null) { $this->setMin($min); $this->setMax($max); } public function getMin() { return $this->_min; } public function getMax() { return $this->_max; } public function setMin($min) { if (null !== $this->_max && $min > $this->_max) { throw new Zend_Validate_Exception('The minimum must be less than or equal to the maximum length, but ' . $min . ' > ' . $this->_max); } $this->_min = max(0, (integer) $min); return $this; } public function setMax($max) { if (null === $max) { $this->_max = null; } else if ($max < $this->_min) { throw new Zend_Validate_Exception('The maximum must be greater than or equal to the minimum length, but ' . $max . ' < ' . $this->_min); } else { $this->_max = (integer) $max; } return $this; } /** * Vérifie que le tableau $value a un nombre d'éléments compris entre les bornes min et max * * @param array $value * @return boolean */ public function isValid($value) { $value = (array)$value; $this->_setValue($value); $size = count($value); if ($size < $this->_min) { $this->_error(self::TOO_SHORT); } if (null !== $this->_max && $this->_max < $size) { $this->_error(self::TOO_LONG); } if (count($this->_messages)) { return false; } else { return true; } } }
je confirme que le validateur est appliqué aux élément du tableau et pas au tableau lui-même donc je reviens sur ma question, comment faire pour valider un tableau ?
Hors ligne
ok, suffisait de faire un ->setRequired(true) ...
Hors ligne
Pages: 1