Загрузка Файла Фреймворка Yii

#php #image #file-upload #yii

Вопрос:

Я пытаюсь узнать, как загрузить файл изображения в Yii. Я использую этот код

     <?php
use yiiwidgetsActiveForm;
?>

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>

<?= $form->field($model, 'imageFile')->fileInput() ?>

    <button>Submit</button>

<?php ActiveForm::end() ?>
 

в ProjectFile/views/site/upload.php файл.
Проблема заключается в

 <?= $form->field($model, 'imageFile')->fileInput() ?>
 

$модель выделяет меня красным подчеркиванием. Я посмотрел много примеров, и все они написали примерно так.
Что мне нужно сделать, чтобы остановить эту проблему?

Изменить: Находится внутри controller/SiteController.php

 // function for upload
    public function actionUploadImage()
    {
        $model = new UploadImageForm();

        if (Yii::$app->request->isPost) {
            $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            if ($model->upload()) {
                // file is uploaded successfully
                return;
            }
        }

        return $this->render('upload', ['model' => $model]);
    }
 

Находится внутри models/UploadImageForm.php

 <?php


namespace appmodels;

use yiibaseModel;
use yiiwebUploadedFile;

class UploadImageForm extends yiibaseModel
{

    public $imageFile;

    // gives rules of how to upload picture
    public function rules(){
        return [
          [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
        ];
    }

    // uploads picture
    public function upload(){
        if($this->validate()){
            $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
        }
    }

}
 

Комментарии:

1. Вы следовали руководству, как указано в документации ?

2. Красное подчеркивание — вы имеете в виду, что поле ввода файла имеет красную рамку, а под/над/рядом с полем появляется сообщение об ошибке? Если это ваш случай, то у вас есть проблемы с проверкой. Укажите, пожалуйста, метод кода правил вашей модели(который используется в форме).

3. @DefinitelynotRafal Да, я просмотрел документацию, которой вы поделились.

4. @neolodor, какой тип проверки мне нужно использовать?

5. @gun зависит от логики хранения файлов, которую вы хотите реализовать: если вы хотите просто загрузить файл в какой-либо каталог на сервере, следуйте документам yii2 , как я вижу из обновления, вы сделали все в порядке. но: 1. Метод модели upload должен возвращать некоторый результат. В вашем случае это ничего не возвращает. 2. После неудачной попытки загрузить файл загляните в журнал ошибок — возможно, у вас возникли проблемы с разрешениями на доступ к файлам.

Ответ №1:

  1. Пожалуйста, убедитесь, что у модели есть атрибут/поле с именем «Файл изображения».
  2. Проверьте свой редактор, вы получаете красную строку в своем редакторе, тогда это проблема, связанная с вашим редактором

Ответ №2:

То же самое произошло и со мной, ваш код просмотра довольно хорош. У меня тоже было то же самое, я заставил это работать, используя эти строки в функции модели:

 $imageFile= UploadedFile::getInstances($model, 'imageFile')[0];
$imageFile->saveAs('uploads/' . $imageFile->baseName . '.' . $imageFile->extension);
 

и в действии контроллера:

 $model->imageFile= UploadedFile::getInstances($model, 'imageFile')[0];
 

Ответ №3:

В viewsupload.php красное подчеркивание отображается, потому что система не может найти модель$. Во время работы программа подключит модель $к контроллеру. Таким образом, красное подчеркивание не является проблемой для php-файлов.