Что бы загрузить изображения нужна предварительная настройка состоящая из 3 этапов.
Этап 1: Нужно принудительно указать доступ к assets ресурсов виджета, для этого нужно добавить следующую строчку в файл /common/config/main.php в директиву aliases
'@vova07/fileapi' => '@vendor/vova07/yii2-fileapi-widget',
Этап 2: Создания Endpoint'a для предварительной загрузки изображения
Необходимо добавить данный код в контроллер где происходит загрузка.
/**
* @return array
*/
public function actions()
{
return ArrayHelper::merge(parent::behaviors(),[
'file-upload' => [
'class' => FileAPIUpload::className(),
'path' => '@static/temp/',
],
]);
}
Этап 3: Необходимо добавить виджет загрузки изображений в форму загрузки
Название поля в данном случае img, url = file-upload, т.е. виджет будет обращаться по адресу <название контроллера>/file-upload, это именно тот enpoind который мы создали на этапе 1.
<?= $form->field($model, 'img')->widget(FileAPI::className(), [
'settings' => [
'url' => ['file-upload']
]
]) ?>
Этап 4: Необходимо создать обработчик в модели таблицы в которую мы собираемся загрузить изображение
Во первых нам нужно добавить в модель константу с путем для изображения, например:
const IMG_PATH = "event";
Что бы изображения складывались в папку event
Далее нужно добавить директиву в метод behaviors, если его нет, то нужно создать
/**
* @return array
*/
public function behaviors()
{
return ArrayHelper::merge(parent::behaviors(),[
'uploadBehavior' => [
'class' => UploadBehavior::className(),
'attributes' => [
'img' => [
'path' => '@static/web/images/'. self::IMG_PATH .'/',
'tempPath' => '@static/temp/',
'url' => $this->getImgPath()
],
]
],
]);
}
В данном коде мы указываем что изображения будут складываться в bundle static, папку web/images, и директиву которую мы указали в константе IMG_PATH = ‘event’, итого у нас получается путь /static/web/images/event/. Так же мы указываем название поля в которое будет сохраняться название файла img.
Так же нужно добавить еще 2 метода в модель
Первый метод вытаскивает путь до файла(path)
/**
* @return string
*/
public function getImgPath()
{
return Yii::$app->params['staticDomain'] . '/images/' . self::IMG_PATH . '/';
}
staticDomain это отдельный домен на котором будут висеть изображения которые мы складываем в bundle static, его нам нужно отразить в конфиге Yii2, об этом позже.
Второй метод вытаскивает полный прямой URL изображения
/**
* @return string
*/
public function getImgUrl()
{
return $this->img ? $this->getImgPath() . $this->img : $this->getImgPath() . 'default.jpg';
}
Этап 5: Указать staticDomain
Что бы указать staticDomain нужно добавить его в params в bundle common, для этого нужно добавить следующую строчку в конфиг /common/config/params.php
'staticDomain' => “https://mysite.com/”,