Задать вопрос
alexanderbulatov
@alexanderbulatov
Fullstack разработчик

Выдаёт 404 ошибку в бэкэнде, но не во фронтэнде. Как исправить?

Добрового времени суток!

Ситуация:
На шаблоне 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');
        }
    }
}
  • Вопрос задан
  • 142 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы