Come da descrizione, ho creato un validatore che (teoricamente) dovrebbe accettare anche valori nulli o vuoti
purtroppo così non accade e inoltre non è un campo ‘required’.
Questa è la regola:
array('ssn', 'validateSSN', 'allowEmpty'=>true)
mentre questo è il validatore:
public function validateSSN($attribute) {
if(!preg_match('/\b[0-9]{3}-[0-9]{2}-[0-9]{4}\b/', $attribute))
$this->addError($attribute, 'Your SSN is not correct.');
}
Da quanto ho capito, allowEmpty non è un parametro generale che dice "Se è vuoto non validare", bensì è un parametro che passi alla funzione che valida.
Pertanto, visto che poi non gestisci il parametro passato all’interno della tua funzione la tua funzione controllerà sempre, che sia o meno vuoto il tuo campo.
Quindi, o metti un
public function validateSSN($attribute) {
if($attribute && !preg_match('/\b[0-9]{3}-[0-9]{2}-[0-9]{4}\b/', $attribute))
$this->addError($attribute, 'Your SSN is not correct.');
}
o gestisci il parametro che passi
public function validateSSN($attribute,$params) {
$allowEmpty=isset($params['allowEmpty'])?$params['allowEmpty']:false;
....
}
allora ho fatto [font="Lucida Console"]var_dump($attribute)[/font]
e mi son reso conto che [font=“Lucida Console”]$attribute[/font] ritorna ‘ssn’ e non il valore inserito (scusate l’ignoranza )
perciò la soluzione è andare a pescare dal [font="Lucida Console"]$_POST[/font] il relativo valore:
public function validateSSN($attribute) {
$value = $_POST['Seller'][$attribute];
if($value && !preg_match('/\b[0-9]{3}-[0-9]{2}-[0-9]{4}\b/', $value))
$this->addError($attribute, 'Your SSN is not correct.');
}