You are viewing revision #3 of this wiki article.
This is the latest version of this article.
You may want to see the changes made in this revision.
How-To use a special validation rule ¶
If you have a form, you sometimes need special validation Rules not included in Yii. Here i share a special rule with you, i just wrote. Maybe you have the case, when a user needs to Fill ou Field A oder the Fields B, C and D.
public function thisOrThatRequired($attribute, $params) {
if ($params['check']) {
$check = explode(',', $params['check']);
$txt = "";
foreach ($check as $item) $txt.=$this->getAttributeLabel($item).", ";
$txt = substr($txt, 0,-2);
if ($this->$attribute) $input1=true;
else $input1=false;
$input2_komplett=true;
$input2_teilweise=false;
foreach ($check as $item) {
if (!$this->$item) $input2_komplett=false;
if ($this->$item) $input2_teilweise=true;
}
// Main field empty but at least 1 empty subfield
if ((!$input1 && !$input2_komplett && $input2_teilweise)) {
$this->addError($attribute, $this->getAttributeLabel($attribute) . " or together with: " . $txt);
foreach ($check as $item) {
if (!$this->$item) $this->addError($item, $this->getAttributeLabel($item)." together or leave blank (".$txt.")");
}
}
// all empty
elseif (!$input1 && !$input2_komplett) {
$this->addError($attribute, $this->getAttributeLabel($attribute) . " oder folgende Felder zusammen angegeben: " . $txt);
}
// Mainfiled but one Subfield empty
elseif (!$input2_komplett && $input2_teilweise) {
foreach ($check as $item) {
$this->addError($item, $this->getAttributeLabel($item) . " leer lassen oder mit folgenden Feldern ausfüllen: " . $txt);
}
}
}
}
public function rules() {
return array(
....
array('firma', 'thisOrThatRequired', 'check' => 'vorname,nachname,anrede','on'=>'insert,rework'),
...
}
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.