protected function createDataDescription() { $result = parent::createDataDescription(); if ($result->isEmpty()) { $result->load(['title' => ['type' => FieldDescription::FIELD_TYPE_STRING], 'message' => ['type' => FieldDescription::FIELD_TYPE_STRING], "hint" => ['type' => FieldDescription::FIELD_TYPE_TEXT]]); } return $result; }
/** * @copydoc DataSet::createDataDescription */ protected function createDataDescription() { $result = parent::createDataDescription(); foreach ($result as $fieldMetaData) { $keyInfo = $fieldMetaData->getPropertyValue('key'); $values = false; //Если это внешний ключ и не в режиме списка if (is_array($keyInfo)) { switch ($fieldMetaData->getType()) { case FieldDescription::FIELD_TYPE_SELECT: $fkTableName = $keyInfo['tableName']; $fkKeyName = $keyInfo['fieldName']; //загружаем информацию о возможных значениях $values = $this->getFKData($fkTableName, $fkKeyName); break; case FieldDescription::FIELD_TYPE_MULTI: $m2mTableName = $keyInfo['tableName']; $m2mPKName = $keyInfo['fieldName']; //Если существует таблица связанная if ($this->dbh->tableExists($m2mTableName)) { $tableInfo = $this->dbh->getColumnsInfo($m2mTableName); unset($tableInfo[$m2mPKName]); $m2mValueFieldInfo = current($tableInfo); if (isset($m2mValueFieldInfo['key']) && is_array($m2mValueFieldInfo)) { $values = $this->getFKData($m2mValueFieldInfo['key']['tableName'], $m2mValueFieldInfo['key']['fieldName']); } } //если нет значит это забота программиста наполнить значениями break; case FieldDescription::FIELD_TYPE_LOOKUP: if ($editor = $fieldMetaData->getPropertyValue('editor')) { $url = $fieldMetaData->getName() . '-' . $editor; } else { $url = $fieldMetaData->getName(); } //Problem with safari where urlencoded backslash(%5C) converted into backslash $fieldMetaData->setProperty('url', '/' . str_replace('\\', '.', $url) . '/lookup/'); $table = $keyInfo['tableName']; if ($this->dbh->tableExists($table)) { if ($t = $this->dbh->getTranslationTablename($table)) { $table = $t; unset($t); } $valueFieldName = array_reduce(array_keys($this->dbh->getColumnsInfo($table)), function ($str, $row) { if (strpos($row, '_name')) { return $row; } return $str; }); $fieldMetaData->setProperty('value_field', $valueFieldName); $fieldMetaData->setProperty('value_table', $table); $fieldMetaData->setProperty('key_field', $keyInfo['fieldName']); } break; } if (!empty($values)) { call_user_func_array([$fieldMetaData, 'loadAvailableValues'], $values); } } } return $result; }