J'ai 4 attributs dans un tableau; num_a
, num_b
, num_c
, num_d
, ceux-ci peuvent être individuellement dans une plage de 0 à 2, par ex. J'ai dans ma $validate
propriété dans le modèle:Validation CakePHP2 sur le champ non dans le tableau
'num_a' => [
'numeric' => [
'rule' => 'numeric',
'message' => 'Please provide the number of a.',
],
'isInRange' => [
'rule' => ['range', -1, 3],
'message' => 'Must be between 0 and 2.'
],
Le problème que je suis face est que la somme de ces doit être supérieure à 0. Je voudrais à retourner une erreur de validation si tel est le cas, par exemple:
'num_all' => [
'rule' => 'returnFalse',
'message' => 'There were no a, b, c or d selected.',
],
J'ai la fonction returnFalse
dans mon modèle qui est tout simplement
public function returnFalse() {
return false;
}
pour ajouter toujours cette règle.
Dans le beforeValidate
je vérifie la somme des num_a
par num_d
et en supprimant la règle de validation si $sum > 0
comme ceci:
public function beforeValidate($options=array())
{
$sum = 0;
$sum += (isset($this->data['MyModel']['num_a'])) ? $this->data['MyModel']['num_a'] : 0;
$sum += (isset($this->data['MyModel']['num_b'])) ? $this->data['MyModel']['num_b'] : 0;
$sum += (isset($this->data['MyModel']['num_c'])) ? $this->data['MyModel']['num_c'] : 0;
$sum += (isset($this->data['MyModel']['num_d'])) ? $this->data['MyModel']['num_d'] : 0;
if ($sum > 0) {
$this->validator()->remove('num_all');
}
}
Mais pour une raison que je ne peux pas obtenir ce pour retourner une erreur de validation pour num_all
.
J'ai même essayé d'ajouter un champ virtuel alors peut-être l'erreur de validation avait quelque chose à joindre à:
public $virtualFields = [
'num_all' => 'SELECT 0 FROM dual',
];
mais cela ne fonctionne pas non plus. J'utilise CakePHP v2.8.