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