public static function create($params)
{
$params['class'] = static::className();
/** @var static $model */
$model = Yii::createObject($params);
$params = [];
if (!empty($params['attribute'])) {
$params['name'] = $params['attribute'];
}
foreach ($model->entityModel->getEavAttributes()->andWhere($params)->all() as $attribute) {
$handler = AttributeHandler::load($model, $attribute);
$attribute_name = $handler->getAttributeName();
//
// Add rules
//
if ($attribute->eavType->storeType == ValueHandler::STORE_TYPE_RAW) {
$model->addRule($attribute_name, 'default', ['value' => $attribute->defaultValue]);
}
if ($attribute->eavType->storeType == ValueHandler::STORE_TYPE_OPTION) {
$model->addRule($attribute_name, 'default', ['value' => $attribute->defaultOptionId]);
}
if ($attribute->eavType->storeType == ValueHandler::STORE_TYPE_ARRAY) {
$model->addRule($attribute_name, 'string');
}
if ($attribute->required) {
$model->addRule($attribute_name, 'required');
} else {
$model->addRule($attribute_name, 'safe');
}
//
// Load attribute value
//
$value = $handler->valueHandler->load();
if (!$value) {
// Set default attribute
$value = $handler->valueHandler->defaultValue();
}
$model->defineAttribute($attribute_name, $value);
//
// Add widget handler
//
$model->handlers[$attribute_name] = $handler;
}
//
// Set POST data
//
if (Yii::$app->request->isPost && Yii::$app->request->getIsConsoleRequest() == false) {
$modelName = self::getModelShortName($model->entityModel);
$post = Yii::$app->request->post($modelName);
$model->load($post, 'EavModel');
}
return $model;
}