Добрового времени суток!
Ситуация:
На шаблоне Yii2 Advanced в бэкэнде не удаляется фотография. Выдаётся 404 ошибка.
Данные:
Отображение фотографий идёт через Kartik Fileinput Bootstrap.
И именно через кнопку удаления в этом виджете появляется ошибка 404, но сообщение, что именно такого адреса нет.
И ирония в том, что на рабочем хостинге (не локалка) выдаётся ошибка 403 Forbidden, а не 404!
При этом на фронтэнде нет этой ошибки и фотография удаляется, всё как должно быть.
Вот код во view
$form->field($uploadForm, 'imageFiles[]')->widget(FileInput::class, [
//'name' => 'attachment_53',
'options' => ['multiple' => true, 'accept' => 'image/*'],
'pluginOptions' => [
'deleteUrl' => Url::to(['/ads-moderation/delete-ad-image']),
'initialPreviewConfig' => $model->imageLinkData, // конфигурация для удаления фотографий
//'deleteExtraData' => ,
'initialPreview' => $model->imageLinksFromBackend ? $model->imageLinksFromBackend : '',
'initialPreviewAsData' => true,
'overwriteInitial' => false,
'fileActionSettings' => [
//'initialPreviewShowDelete' => false,
'showZoom' => false,
],
'showCaption' => false,
'showRemove' => false,
'showUpload' => false,
'browseClass' => 'btn btn-primary btn-block',
'browseIcon' => '<i class="glyphicon glyphicon-camera"></i> ',
'browseLabel' => Yii::t('kupdam', 'Выбрать фото'),
'maxFileSize' => 15000,
'macFileCount' => 10,
],
])
Код в контроллере (действие, на которое ссылается url в ключе deleteUrl)
public function actions()
{
return [
'list-subcategories' => [
'class' => 'common\actions\ads\ListSubcategories',
],
'list-regions' => [
'class' => 'common\actions\ads\ListRegions',
],
'list-cities' => [
'class' => 'common\actions\ads\ListCities',
],
'delete-ad-image-from-ads-table' => [
'class' => 'common\actions\ads\DeleteAdImageFromAdsTable',
],
'delete-ad-image' => [
'class' => 'common\actions\ads\DeleteAdImage',
],
];
}
И собственно весь класс самого action целиком
namespace common\actions\ads;
use Yii;
use common\models\AdsPhotos;
use yii\web\NotFoundHttpException;
class DeleteAdImage extends \yii\base\Action
{
public function run()
{
$id = Yii::$app->request->post('key');
$image = AdsPhotos::find()->where(['photo_id' => $id])->limit(1)->one();
if ($image) {
$path = Yii::getAlias('@webrootFrontend').$image->path;
if (file_exists($path)) {
unlink($path);
return $image->delete() ?: null;
} else {
throw new NotFoundHttpException('A file doesn\'t exixt');
}
} else {
throw new NotFoundHttpException('A record doesn\'t exixt');
}
}
}