За последние 24 часа нас посетили 22028 программистов и 1128 роботов. Сейчас ищут 873 программиста ...

Не получается загрузка файлов

Тема в разделе "Yii", создана пользователем lordconst, 27 апр 2021.

  1. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    151
    Симпатии:
    1
    Привет, я новичок в Yii2. Мне необходимо загрузить с помощью формы excel-файл. С помощью документации создал такую модель (код будет ниже), далее прописал в нужном мне контроллере метод (также будет код), но при загрузке страницы представления у меня выходит ошибка (во вложении). Понятия не имею почему она происходит, попробовал гуглить, но ничего толкового применительно к моей ситуации не нашел. Помогите разобраться, что я делаю не так?
    Модель:
    Код (Text):
    1. <?php
    2.  
    3. namespace app\models;
    4.  
    5. use yii\base\Model;
    6. use yii\web\UploadedFile;
    7.  
    8. class UploadForm extends Model
    9. {
    10.     public $excelFile;
    11.  
    12.     public function rules()
    13.     {
    14.         return [
    15.           [['excelFile'], 'file', 'skipOnEmpty' => 'false', 'extensions' => 'xlsx, xls'],
    16.         ];
    17.     }
    18.  
    19.     public function upload()
    20.     {
    21.         if ($this->validate()) {
    22.             $this->excelFile->saveAs('uploads/' . $this->excelFile->baseName . '.' . $this->excelFile->extension);
    23.             return true;
    24.         } else {
    25.             return false;
    26.         }
    27.     }
    28. }
    Контроллер
    Код (Text):
    1. <?php
    2.  
    3. namespace app\controllers;
    4.  
    5. use app\models\UploadForm;
    6. use Yii;
    7. use yii\web\Controller;
    8. use yii\web\UploadedFile;
    9.  
    10. class StudentController extends Controller
    11. {
    12.  
    13.     /**
    14.      * @return string
    15.      */
    16.     public function actionIndex()
    17.     {
    18.         return $this->render('index');
    19.     }
    20.  
    21.     public function actionUpload()
    22.     {
    23.         $model = new UploadForm;
    24.  
    25.         if (Yii::$app->request->isPost) {
    26.             $model->excelFile = UploadedFile::getInstance($model, 'excelFile');
    27.             if ($model->upload()) {
    28.                 return;
    29.             }
    30.         }
    31.  
    32.         return $this->render('upload', ['model' => $model]);
    33.     }
    34.  
    35. }
    Представление
    Код (Text):
    1. <?php
    2.  
    3. use yii\widgets\ActiveForm;
    4.  
    5. $this->title = 'Студенты';
    6. ?>
    7. <br>
    8. <div class="container">
    9.     <h1 align="center">Загрузка данных о студентах из файла</h1>
    10.     <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
    11.     <?= $form->field($model, 'excelFile')->fileInput() ?>
    12.     <button>Submit</button>
    13.     <?php ActiveForm::end() ?>
    14. </div>
    И еще вопрос вдогонку: могу ли я использовать обыкновенные теги формы? Например, так:
    Код (Text):
    1. <form action="student/Upload">
    2.         <div class="form-group">
    3.             <label for="exampleFormControlFile1">Выберите файл .xls/.xlsx с локального компьютера</label>
    4.             <input type="file" class="form-control-file" id="exampleFormControlFile1">
    5.         </div>
    6.         <button type="submit" class="btn btn-primary">Загрузить</button>
    7.     </form>
    Если да, то что прописать в action, чтобы форма отправлялась в нужный мне метод контроллера?
     

    Вложения:

  2. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    151
    Симпатии:
    1
    Уже решил проблему. Решение очевидное, даже не ошибка, а невнимательность. У меня метод контроллера возвращал вьюху на index, а надо было на upload