public function actionRule($id) { $cm = Cm::findOne($id); $table_name = Cm::getTable($cm->tab_index, $cm->tab); $table = Yii::$app->db->getTableSchema($table_name); $types = []; $lengths = []; foreach ($table->columns as $column) { if ($column->autoIncrement) { continue; } if (!$column->allowNull && $column->defaultValue === null) { $types['required'][] = $column->name; } switch ($column->type) { case Schema::TYPE_SMALLINT: case Schema::TYPE_INTEGER: case Schema::TYPE_BIGINT: $types['integer'][] = $column->name; break; case Schema::TYPE_BOOLEAN: $types['boolean'][] = $column->name; break; case Schema::TYPE_FLOAT: case 'double': // Schema::TYPE_DOUBLE, which is available since Yii 2.0.3 // Schema::TYPE_DOUBLE, which is available since Yii 2.0.3 case Schema::TYPE_DECIMAL: case Schema::TYPE_MONEY: $types['number'][] = $column->name; break; case Schema::TYPE_DATE: case Schema::TYPE_TIME: case Schema::TYPE_DATETIME: case Schema::TYPE_TIMESTAMP: $types['safe'][] = $column->name; break; default: // strings if ($column->size > 0) { $lengths[$column->size][] = $column->name; } else { $types['string'][] = $column->name; } } } $rules = []; foreach ($types as $type => $columns) { $rules[] = "[['" . implode("', '", $columns) . "'], '{$type}']"; } foreach ($lengths as $length => $columns) { $rules[] = "[['" . implode("', '", $columns) . "'], 'string', 'max' => {$length}]"; } $response = Yii::$app->response; $response->format = $response::FORMAT_RAW; return implode(",\n", $rules); }
/** * @param $id */ public static function setCm($id) { $cm = Cm::findOne($id); $table = Cm::getTable($cm->tab_index, $cm->tab); self::$_tableName = $table; self::$_rules = self::getRulesFromString($cm->rules, $table); self::$_select_field = $cm->select_field; self::$_title_field = $cm->title_field; self::$_adv_field = $cm->adv_field; $fields = CmField::find()->where(['cm_id' => $id])->orderBy(['sort' => SORT_ASC, 'id' => SORT_ASC])->asArray()->all(); self::$_fields = self::getOptions($fields); return new static(); }