Ошибка на upload()

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
svil
Сообщения: 532
Зарегистрирован: 2018.02.12, 22:41

Ошибка на upload()

Сообщение svil » 2019.04.19, 09:49

В документации
https://yiiframework.com.ua/ru/doc/guid ... le-upload/
есть проверка на загрузку

Код: Выделить всё

if ($model->upload()) {
                // file is uploaded successfully
                return;
            }
Мне надо проверить, загрузился ли файл и вывести сообщение.
Выдает ошибку

Код: Выделить всё

Calling unknown method: app\modules\admin\models\UploadForm::upload()
Контроллер

Код: Выделить всё

<?php


namespace app\modules\admin\controllers;
use Yii;
use yii\web\Controller;
use yii\web\UploadedFile;
use app\modules\admin\models\UploadForm;

class TestController extends Controller
{
    public function actionIndex()
    {
        

        $model = new UploadForm();

        if (Yii::$app->request->post()) {
            $model->file = UploadedFile::getInstance($model, 'file');
            if ($model->validate()) {
                $path = Yii::$app->params['pathUploads'] . 'upload/';
                $model->file->saveAs($path . $model->file);
            }

        }

        if ($model->upload()) {
            // file is uploaded successfully
            Yii::$app->session->setFlash('success', "Файл {$model->file} загружен на сервер");

            return true;
        } else {
            return false;
        }
        return $this->render('index', ['model' => $model]);
    }

}


Модель

Код: Выделить всё

<?php

namespace app\modules\admin\models;

use Yii;
use yii\base\Model;

class UploadForm extends Model
{

    public $file;

    public function rules()
    {
        return [
            // username and password are both required

            [['file'], 'file', 'extensions' => 'xls, xlsx',


                'skipOnEmpty' => false]

        ];

    }

}
Вид

Код: Выделить всё

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;
?>

<?php if( Yii::$app->session->hasFlash('success') ): ?>
    <div class="alert alert-success alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <?php echo Yii::$app->session->getFlash('success'); ?>
    </div>
<?php endif;?>


<div class="replay-box">
    <div class="row">
        <div class="form-group">
        <?php $form = ActiveForm::begin([
            'options' => ['enctype' => 'multipart/form-data']
        ]); ?>
        <div class="blank-arrow">
            <label>Загрузить файл</label>
        </div>
        <span>*</span>
        <?= $form->field($model, 'file')->fileInput()->label(false, ['style'=>'display:none']); ?>

        <div class="form-group">

            <?= Html::submitButton('Отправить файл', ['class' => 'btn-upload']) ?>



        </div>

        <?php ActiveForm::end(); ?>


</div>

    </div>

</div>

someweb
Сообщения: 535
Зарегистрирован: 2017.03.09, 10:12

Re: Ошибка на upload()

Сообщение someweb » 2019.04.19, 10:42

Если не понимаете что пишите, то делайте один в один с документаций.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.

Аватара пользователя
svil
Сообщения: 532
Зарегистрирован: 2018.02.12, 22:41

Re: Ошибка на upload()

Сообщение svil » 2019.04.19, 11:06

Один в один тоже делала

s-sergey1990
Сообщения: 21
Зарегистрирован: 2014.07.01, 23:11

Re: Ошибка на upload()

Сообщение s-sergey1990 » 2019.04.19, 11:32

А где метод upload в моделе?

Аватара пользователя
svil
Сообщения: 532
Зарегистрирован: 2018.02.12, 22:41

Re: Ошибка на upload()

Сообщение svil » 2019.04.19, 12:22

Переделала. Работает.
Модель

Код: Выделить всё

<?php
namespace app\models;

use yii\base\Model;
use yii\web\UploadedFile;

class UploadForm extends Model
{
/**
* @var UploadedFile
*/
public $imageFile;

public function rules()
{
return [
[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'xls, xlsx'],
];
}

public function upload()
{
if ($this->validate()) {
$this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
return true;
} else {
return false;
}
}
}
?>
Контроллер

Код: Выделить всё

 public function actionUpload()
    {
   

        $model = new UploadForm();


        if (Yii::$app->request->isPost) {
            $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            if ($model->upload()) {
                // file is uploaded successfully
                $ok="Загрузка успешна";
              //  Yii::$app->session->setFlash('contactFormSubmitted');

                Yii::$app->session->setFlash('success', "Файл загружен");

                return $this->refresh();


        }else{
                return $this->refresh();

                Yii::$app->session->setFlash('error', 'Ошибка загрузки файла');
        }
        }

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

Код: Выделить всё

<?php
use yii\widgets\ActiveForm;
?>
<?php if( Yii::$app->session->hasFlash('success') ): ?>
    <div class="alert alert-success alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <?php echo Yii::$app->session->getFlash('success'); ?>
    </div>
<?php endif;?>
<?php if ( Yii::$app->session->hasFlash('error') ) : ?>
    <div class="alert alert-danger alert-dismissible" role="alert" aria-label="close">
        <button type="button" class="close"data-dismiss="alert"><span aria-hidden="true">&times;</span>
        </button>
        <?=(Yii::$app->session->getFlash('error')); ?>
    </div>
<?php endif; ?>

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

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

<button>Submit</button>

<?php ActiveForm::end() ?>


Аватара пользователя
svil
Сообщения: 532
Зарегистрирован: 2018.02.12, 22:41

Re: Ошибка на upload()

Сообщение svil » 2019.04.19, 12:23

Всем спасибо за ответы

Ответить