Cum adaugam reguli noi la campurile dinamice.

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'];
      }
    }
  }
}

 

About

Software Development Manager, Architect

Leave a Reply

Your email address will not be published. Required fields are marked *

[TOP]