generateRules() public method

Generates validation rules for the specified table.
public generateRules ( yii\db\TableSchema $table ) : array
$table yii\db\TableSchema the table schema
return array the generated validation rules
コード例 #1
0
 /**
  * @inheritdoc
  */
 public function generateRules($table)
 {
     $rules = parent::generateRules($table);
     if ($this->includeTimestampBehavior) {
         // Assume same datatype for created_at/updated_at columns
         $this->_useDatetimeValue = isset($table->columns[$this->createdColumnName]) && $table->columns[$this->createdColumnName]->type === Schema::TYPE_DATETIME;
         foreach ($rules as $i => $rule) {
             if (strpos($rule, "'{$this->createdColumnName}'") === false && strpos($rule, "'{$this->updatedColumnName}'") === false || strpos($rule, "'exist', " !== false)) {
                 continue;
             }
             list($ruleFields, $ruleName) = eval("return {$rule};");
             if (($key = array_search($this->createdColumnName, $ruleFields)) !== false) {
                 unset($ruleFields[$key]);
             }
             if (($key = array_search($this->updatedColumnName, $ruleFields)) !== false) {
                 unset($ruleFields[$key]);
             }
             if (empty($ruleFields)) {
                 unset($rules[$i]);
             } else {
                 $newRuleFields = "['" . implode("', '", $ruleFields) . "']";
                 $rules[$i] = preg_replace('#^\\[\\[[^\\]]+\\]#', '[' . $newRuleFields, $rule);
             }
         }
     }
     return $rules;
 }
コード例 #2
0
 public function generateRules($table)
 {
     $rules = parent::generateRules($table);
     foreach ($rules as &$r) {
         $r = str_replace(' => ', '=>', $r);
         $posEndAttr = strpos($r, ']', 2);
         $attrList = substr($r, 2, $posEndAttr);
         $r = substr($r, 0, 2) . str_replace(', ', ',', $attrList) . substr($r, $posEndAttr + 2);
     }
     return $rules;
 }
コード例 #3
0
ファイル: Generator.php プロジェクト: Gnome007/yii2-giiant
 /**
  * Generates validation rules for the specified table and add enum value validation.
  * @param \yii\db\TableSchema $table the table schema
  * @return array the generated validation rules
  */
 public function generateRules($table)
 {
     $rules = [];
     //for enum fields create rules "in range" for all enum values
     $enum = $this->getEnum($table->columns);
     foreach ($enum as $field_name => $field_details) {
         $ea = array();
         foreach ($field_details['values'] as $field_enum_values) {
             $ea[] = 'self::' . $field_enum_values['const_name'];
         }
         $rules[] = "['" . $field_name . "', 'in', 'range' => [\n                    " . implode(",\n                    ", $ea) . ",\n                ]\n            ]";
     }
     return array_merge(parent::generateRules($table), $rules);
 }
コード例 #4
0
ファイル: Generator.php プロジェクト: pafnow/yii2-giiant
 /** Added by pafnow
  * Generates validation rules for the specified table.
  * @param \yii\db\TableSchema $table the table schema
  * @return array the generated validation rules
  */
 public function generateRules($table)
 {
     $table_clone = clone $table;
     $types = [];
     foreach ($table_clone->columns as $key => $column) {
         $column_clone = clone $column;
         $table_clone->columns[$key] = $column_clone;
         $type_comment = Json::getValue($column->comment, "type", false);
         if (empty($type_comment)) {
             continue;
         }
         $types[$type_comment][] = $column->name;
         if (!$column->allowNull && $column->defaultValue === null) {
             $types['required'][] = $column->name;
         }
         //Remove the column from the table so it is not generated again by the parent function
         unset($table_clone->columns[$key]);
     }
     $rules = [];
     foreach ($types as $type => $columns) {
         $rules[] = "[['" . implode("', '", $columns) . "'], '{$type}']";
     }
     return array_merge(parent::generateRules($table_clone), $rules);
 }
コード例 #5
0
ファイル: Generator.php プロジェクト: schmunk42/yii2-giiant
 /**
  * Generates validation rules for the specified table and add enum value validation.
  *
  * @param \yii\db\TableSchema $table the table schema
  *
  * @return array the generated validation rules
  */
 public function generateRules($table)
 {
     $columns = [];
     foreach ($table->columns as $index => $column) {
         $isBlameableCol = $column->name === $this->createdByColumn || $column->name === $this->updatedByColumn;
         $isTimestampCol = $column->name === $this->createdAtColumn || $column->name === $this->updatedAtColumn;
         $removeCol = $this->useBlameableBehavior && $isBlameableCol || $this->useTimestampBehavior && $isTimestampCol;
         if ($removeCol) {
             $columns[$index] = $column;
             unset($table->columns[$index]);
         }
     }
     $rules = [];
     //for enum fields create rules "in range" for all enum values
     $enum = $this->getEnum($table->columns);
     foreach ($enum as $field_name => $field_details) {
         $ea = array();
         foreach ($field_details['values'] as $field_enum_values) {
             $ea[] = 'self::' . $field_enum_values['const_name'];
         }
         $rules[] = "['" . $field_name . "', 'in', 'range' => [\n                    " . implode(",\n                    ", $ea) . ",\n                ]\n            ]";
     }
     // inject namespace for targetClass
     $parentRules = parent::generateRules($table);
     $ns = "\\{$this->ns}\\";
     $match = "'targetClass' => ";
     $replace = $match . $ns;
     foreach ($parentRules as $k => $parentRule) {
         $parentRules[$k] = str_replace($match, $replace, $parentRule);
     }
     $rules = array_merge($parentRules, $rules);
     $table->columns = array_merge($table->columns, $columns);
     return $rules;
 }
コード例 #6
0
 public function generateRules($table)
 {
     $rules = parent::generateRules($table);
     if (isset($this->behaviorsType['phone']) && isset($this->behaviorsType['phone']['checked']) && $this->behaviorsType['phone']['checked']) {
         if ($this->behaviorType['phone']['phoneAttribute']) {
             $rules[] = "[['{$this->behaviorType['phone']['phoneAttribute']}'], 'borales\\extensions\\phoneInput\\PhoneInputValidator']";
         }
     }
     return $rules;
 }
コード例 #7
0
ファイル: Generator.php プロジェクト: dlds/yii2-giixer
 /**
  * Generates validation rules for the specified table.
  * @param \yii\db\TableSchema $table the table schema
  * @return array the generated validation rules
  */
 public function generateRules($table)
 {
     $rules = parent::generateRules($table);
     foreach ($rules as $key => $rule) {
         $rules[$key] = preg_replace_callback("/[A-Za-z]+::className\\(\\)/", function ($matches) {
             $match = ArrayHelper::getValue($matches, 0);
             $class = ArrayHelper::getValue(explode('::', $match), 0);
             $fqn = ModelHelper::root($this->helperModel->getClass(ModelHelper::RK_MODEL_CM, $class));
             if ($fqn) {
                 return sprintf('%s::className()', $fqn);
             }
             return $match;
         }, $rule);
     }
     return $rules;
 }
コード例 #8
0
ファイル: Generator.php プロジェクト: ivan-chkv/yii2-gii-plus
 /**
  * @inheritdoc
  * @param \yii\gii\plus\db\TableSchema $table
  */
 public function generateRules($table)
 {
     $booleanAttributes = [];
     $integerAttributes = [];
     $uIntegerAttributes = [];
     $numberAttributes = [];
     $uNumberAttributes = [];
     $dateFormats = [];
     $matchPatterns = [];
     $defaultExpressions = [];
     $defaultValues = [];
     $defaultNullAttributes = [];
     foreach ($table->columns as $column) {
         if ($column->autoIncrement) {
             continue;
         }
         if ($column->getIsBoolean()) {
             $booleanAttributes[] = $column->name;
         } elseif ($column->getIsInteger()) {
             if ($column->unsigned) {
                 $uIntegerAttributes[] = $column->name;
             } else {
                 $integerAttributes[] = $column->name;
             }
         } elseif ($column->getIsNumber()) {
             if ($column->unsigned) {
                 $uNumberAttributes[] = $column->name;
             } else {
                 $numberAttributes[] = $column->name;
             }
         }
         if ($column->getHasDateFormat()) {
             $dateFormats[$column->getDateFormat()][] = $column->name;
         }
         if ($column->getHasPattern()) {
             $matchPatterns[$column->getPattern()][] = $column->name;
         }
         if (!is_null($column->defaultValue)) {
             if ($column->defaultValue instanceof Expression) {
                 $this->relationUses[$table->fullName][] = 'yii\\db\\Expression';
                 $defaultExpressions[$column->defaultValue->expression][] = $column->name;
             } else {
                 $defaultValues[$column->defaultValue][] = $column->name;
             }
         } elseif ($column->allowNull) {
             $defaultNullAttributes[] = $column->name;
         }
     }
     $rules = [];
     if (count($booleanAttributes)) {
         $rules[] = '[' . Helper::implode($booleanAttributes, 3) . ', \'filter\', \'filter\' => function ($value) {' . "\n" . '                return $value ? 1 : 0;' . "\n" . '            }, \'skipOnEmpty\' => true]';
         $rules[] = '[' . Helper::implode($booleanAttributes, 3) . ', \'boolean\']';
     }
     if (count($integerAttributes)) {
         $rules[] = '[' . Helper::implode($integerAttributes, 3) . ', \'integer\']';
     }
     if (count($uIntegerAttributes)) {
         $rules[] = '[' . Helper::implode($uIntegerAttributes, 3) . ', \'integer\', \'min\' => 0]';
     }
     if (count($numberAttributes)) {
         $rules[] = '[' . Helper::implode($numberAttributes, 3) . ', \'number\']';
     }
     if (count($uNumberAttributes)) {
         $rules[] = '[' . Helper::implode($uNumberAttributes, 3) . ', \'number\', \'min\' => 0]';
     }
     foreach ($dateFormats as $dateFormat => $attributes) {
         $rules[] = '[' . Helper::implode($attributes, 3) . ', \'filter\', \'filter\' => function ($value) {
             return is_int($value) ? date(\'' . substr($dateFormat, 4) . '\', $value) : $value;
         }]';
     }
     foreach ($dateFormats as $dateFormat => $attributes) {
         $rules[] = '[' . Helper::implode($attributes, 3) . ', \'date\', \'format\' => \'' . $dateFormat . '\']';
     }
     foreach ($matchPatterns as $matchPattern => $attributes) {
         $rules[] = '[' . Helper::implode($attributes, 3) . ', \'match\', \'pattern\' => \'' . $matchPattern . '\']';
     }
     foreach (parent::generateRules($table) as $rule) {
         if (preg_match('~, \'(?:safe|boolean|integer|number)\'\\]$~', $rule)) {
             continue;
         }
         $rules[] = $rule;
     }
     foreach ($defaultExpressions as $defaultExpression => $attributes) {
         $rules[] = '[' . Helper::implode($attributes, 3) . ', \'default\', \'value\' => new Expression(\'' . $defaultExpression . '\')]';
     }
     foreach ($defaultValues as $defaultValue => $attributes) {
         $rules[] = '[' . Helper::implode($attributes, 3) . ', \'default\', \'value\' => \'' . $defaultValue . '\']';
     }
     if (count($defaultNullAttributes)) {
         $rules[] = '[' . Helper::implode($defaultNullAttributes, 3) . ', \'default\', \'value\' => null]';
     }
     return $rules;
 }
コード例 #9
0
ファイル: Generator.php プロジェクト: guillemc/yii2starter
 public function generateRules($tableSchema)
 {
     $ts = $this->getTimestampFields($tableSchema);
     $table = $tableSchema;
     if ($ts) {
         $table = clone $tableSchema;
         foreach ($ts as $field) {
             unset($table->columns[$field]);
         }
     }
     $rules = parent::generateRules($table);
     $nulls = [];
     foreach ($table->columns as $column) {
         if ($column->allowNull && $column->defaultValue === null) {
             $nulls[] = $column->name;
         }
     }
     if ($nulls) {
         array_unshift($rules, "[['" . implode("', '", $nulls) . "'], 'trim']");
         $rules[] = "[['" . implode("', '", $nulls) . "'], 'default', 'value' => null]";
     }
     return $rules;
 }
コード例 #10
0
 /**
  * Generates validation rules for the specified table.
  * @param \yii\db\TableSchema $table the table schema
  * @return array the generated validation rules
  */
 public function generateRules($table)
 {
     $types = [];
     $parentRules = parent::generateRules($table);
     // delete not required fields from required string.
     foreach ($parentRules as $i => $parentRule) {
         if (strpos($parentRule, "'required']") !== false) {
             foreach ($this->_notInsertOnRequired as $column) {
                 $search1 = "'{$column}', ";
                 $search2 = ", '{$column}'";
                 $search3 = "'{$column}'";
                 $parentRule = str_replace($search1, '', $parentRule);
                 $parentRule = str_replace($search2, '', $parentRule);
                 $parentRule = str_replace($search3, '', $parentRule);
                 $parentRules[$i] = $parentRule;
             }
         }
     }
     foreach ($table->columns as $column) {
         /*TODO: (ruben) enhance the url string detection with regex (only when 'url' is the only word, or have an _ before or after the word.*/
         if (strstr($column->name, 'url')) {
             $types['url'][] = $column->name;
         }
     }
     $rules = [];
     foreach ($types as $type => $columns) {
         $rules[] = "[['" . implode("', '", $columns) . "'], '{$type}']";
     }
     $allRules = array_merge($parentRules, $rules);
     return $allRules;
 }