Daca vrei sa vezi ce sunt campurile dinamice si cum faci cu ele, da click aici.
Pas 1: in CustomField.php creezi o noua constanta pentru regula ta, in continuarea regulilor existente acum si o adaugi in getRules():
static $RULE_REQUIRED = 1;
static $RULE_IS_EMAIL = 2;
static $RULE_IS_PHONE = 3;
static $RULE_IS_INTEGER = 4;
static $RULE_IS_FLOAT = 5;
static $RULE_MIN = 6;
static $RULE_MAX = 7;
static $RULE_MIN_LENGTH = 8;
static $RULE_MAX_LENGTH = 9;
(...)
static function getRules() {
return [
self:: $RULE_REQUIRED => Yii::t("app", "Required"),
self:: $RULE_IS_EMAIL => Yii::t("app", "Valid email"),
self:: $RULE_IS_PHONE => Yii::t("app", "Valid telephone number"),
self:: $RULE_IS_INTEGER => Yii::t("app", "Valid integer number"),
self:: $RULE_IS_FLOAT => Yii::t("app", "Valid float number"),
self:: $RULE_MIN => Yii::t("app", "Minumum value"),
self:: $RULE_MAX => Yii::t("app", "Maximum value"),
self:: $RULE_MIN_LENGTH => Yii::t("app", "Minimum length"),
self:: $RULE_MAX_LENGTH => Yii::t("app", "Maximum length"),
];
}
Pas 2: in DACtiveRecord.php in attachCustomRules() creezi codul efectiv de validare:
public function attachCustomRules(&$rules) {
if (is_array($this->customFields) && count($this->customFields)) {
foreach ($this->customFields as $customField) {
$attributeName = "field_{$customField->id}";
$ruleSet = $customField->rules;
$ruleParams = $customField->ruleParameters;
//U::Debug($ruleParams);
if (is_array($ruleSet) && count($ruleSet)) {
foreach ($ruleSet as $rule) {
switch ($rule) {
case CustomField::$RULE_REQUIRED :
if ($customField->type == CustomField::$TYPE_BOOLEAN) {
$rules[] = [[$attributeName], 'required', 'requiredValue' => 1,'message'=>\Yii::t("app","«{field}» must be checked.",['field'=>strtoupper($customField->name)])];
}
else {
$rules[] = [[$attributeName], 'required'];
}
break;
case CustomField:: $RULE_IS_EMAIL:
$rules[] = [[$attributeName], 'email'];
break;
case CustomField:: $RULE_IS_PHONE:
// @todo: de testat!
$rules[] = [[$attributeName], 'match', 'pattern' => '/^[0-9\-\s\+]*$/'];
break;
case CustomField:: $RULE_IS_INTEGER:
$rules[] = [[$attributeName], 'integer'];
break;
case CustomField:: $RULE_IS_FLOAT:
$rules[] = [[$attributeName], 'double'];
break;
case CustomField:: $RULE_MIN:
$rules[] = [[$attributeName], 'number', 'min' => @$ruleParams[CustomField:: $RULE_MIN]];
break;
case CustomField:: $RULE_MAX :
$rules[] = [[$attributeName], 'number', 'max' => @$ruleParams[CustomField:: $RULE_MAX]];
break;
case CustomField:: $RULE_MIN_LENGTH :
$rules[] = [[$attributeName], 'string', 'min' => @$ruleParams[CustomField:: $RULE_MIN_LENGTH]];
break;
case CustomField:: $RULE_MAX_LENGTH :
$rules[] = [[$attributeName], 'string', 'max' => @$ruleParams[CustomField:: $RULE_MAX_LENGTH]];
break;
// adaugi aici regula ta cea noua
default:
$rules[] = [[$attributeName], 'safe'];
break;
}
}
}
else {
$rules[] = [[$attributeName], 'safe'];
}
}
}
}
Categories: Custom fields / campuri dinamice, DOCUMENTATIE TEHNICA, Special content |
Leave a Reply
[TOP]