Проблема с картиковским файл-инпутом. Первый файл без значений аттрибутов data-url и data-key
Проблема с картиковским файл-инпутом(kartik-v/bootstrap-fileinput): загружаю первое изображение - к нему не добавляются аттрибуты data-url и data-key (хотя в респонсе сервера они прилетают), ко всем последующим - все нормально. Кто-то сталкивался с таким? Куда копать?
Вьюшка:
<? $form = ActiveForm::begin([
'id' => 'form-update',
'enableClientValidation' => false,
'validateOnSubmit' => true,
'action' => Url::to(['update', 'id' => $model->id]),
'options' => [
'name' => 'items',
'autocomplete' => 'off',
],
'fieldConfig' => [
'template' => "{label}<div>{input}<span class=\"help-block hidden\"></span></div>",
],
]); ?>
<?= $form->errorSummary($model); ?>
<?php
$name = Images::TYPE_GOODS;
$type = Images::$params[Images::TYPE_GOODS];
$field = 'image';
$initialPreview = array();
$id = array();
if (!$model->isNewRecord) {
$images = $model->getImagesByName($name);
if (is_array($images)) {
foreach ($images as $value) {
$id[] = array(
'frameClass' => (!Yii::$app->params['catalogItemsChangeImage']) ? 'hidden-remove' : null,
'url' => '/upload/delete',
'key' => $value['id'],
'extra' => array(
'id' => $value['itemId'],
'model' => $model::className()
)
);
$value['id'];
$initialPreview[] = $value->getUrl('120x120');
}
}
} else {
$images = $model->getImagesByNameAttach($name);
if (is_array($images)) {
foreach ($images as $value) {
$id[] = array(
'url' => '/upload/delete',
'key' => $value['id'],
'extra' => array(
'id' => $value['itemId'],
'model' => $model::className()
)
);
$value['id'];
$initialPreview[] = $value->getUrlAttach();
}
}
}
?>
<?= $form->field($model, $field)->widget(FileInput::class,
[
'options' => ['accept' => 'image/*'],
'pluginOptions' => [
'allowedExtensions' => ['jpg', 'gif', 'png'],
'initialPreview' => $initialPreview,
'initialPreviewAsData' => true,
'initialPreviewConfig' => $id,
'overwriteInitial' => false,
'previewFileType' => 'image',
'showCaption' => false,
'showCancel' => false,
'showUpload' => false,
'browseClass' => 'btn btn-default btn-sm',
'browseLabel' => Yii::t('app', 'Обзор'),
'removeClass' => 'btn btn-danger btn-sm',
'removeLabel' => Yii::t('app', 'Удалить'),
'removeIcon' => '<i class="fa fa-trash"></i>',
'append' => true,
'maxFileCount' => $type['max'],
'validateInitialCount' => true,
'minImageHeight' => $type['min_height'],
'minImageWidth' => $type['min_width'],
'uploadUrl' => '/upload/upload',
'uploadAsync' => true,
'uploadExtraData' => [
'model' => $model::className(),
'id' => ($model->isNewRecord) ? '' : $model->id,
'name' => $name,
'field' => $field,
'max' => $type['max']
],
],
'pluginEvents' => [
'filebatchselected' => 'function(event, data) {
jQuery("#'. $fileinput .'-image").fileinput("upload");
}',
'filesorted' => 'function(event, params) {
for(var i in params.stack){
var index = parseInt(i) + parseInt(1);
$.ajax({
type: "GET",
url: "/upload/change-position",
data: "id="+params.stack[i].key+"&position="+index,
success: function(data) {}
});
}
}',
]
]) ?>
<?php ActiveForm::end()?>
Контроллер UploadController:
public function actionUpload()
{
if (Yii::$app->request->isAjax) {
$model_name = $_POST['model'];
if (!empty($_POST['id'])) {
$model = $model_name::findOne($_POST['id']);
} else {
$model = new $model_name();
}
$image = UploadedFile::getInstances($model, $_POST['field']);
$count = array();
foreach ($model->getImagesByName($_POST['name']) as $value) {
if (!empty($value->id)) {
$count[] = $value->id;
}
}
if (count($count) < (int)$_POST['max']) {
if (!empty($image)) {
if (is_array($image)) {
$path = $_SERVER['DOCUMENT_ROOT'] . '/frontend/web/uploads/files/' . $model->id . '0.' . $image[0]->name;
move_uploaded_file($image[0]->tempName, $path);
$result = $model->attachImage($path, false, $_POST['name'], $image[0]->name);
unlink($path);
}
return Json::encode([
'initialPreview' => [
'/uploads/store/' . $result->filePath
],
'initialPreviewAsData' => true,
'initialPreviewConfig' => [
[
'url' => '/upload/delete',
'key' => $result->id,
'extra' => array(
'id' => ($model->isNewRecord) ? 0 : $model->id,
'model' => $model_name
)
]
]
]);
}
} else {
return Json::encode(array('error' => 'Max file'));
}
}
return Json::encode('');
}