yii2 загрузка файла

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

yii2 загрузка файла

Сообщение asset »

как в yii2 загружать файлы?

типа таких http://www.yiiframework.com/wiki/567/mu ... ileupload/
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: yii2 загрузка файла

Сообщение vova07 »

Так же как и в примере что вы привели, только использовать нужно "yii\web\UploadedFile".
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: yii2 загрузка файла

Сообщение asset »

vova07 писал(а):Так же как и в примере что вы привели, только использовать нужно "yii\web\UploadedFile".
как виджет вызвать или как?

вот так?

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

use yii\web\UploadedFile;

CMultiFileUpload::widget([
 'model'=>$model,
     'attribute'=>'photos',
     'accept'=>'jpg|gif|png',
     'denied'=>'File is not allowed',
     'max'=>10, // max 10 files

]);
 
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: yii2 загрузка файла

Сообщение vova07 »

Я прошу прощения, бегло посмотрел ссылку, и не заметил что там речь идет о виджете мулти-загрузки.
В данный момент на сколько я знаю, в Yii 2 нет подобного виджета, по этому делать нужно будет самостоятельно. Хотя судя по скрипту на основе которого работает мулти-загрузочный виджет в Yii 1, его удаление оправдано.
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: yii2 загрузка файла

Сообщение asset »

подниму тему ;)

в yii есть

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

Yii::getPathOfAlias('application.uploads');
как с этим быт в yii2 и как их использовать ? Смотрю вроде setAlias или getAlias

кстати файлы можно загружать как на кокбуке yii1.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: yii2 загрузка файла

Сообщение futbolim »

asset писал(а):подниму тему ;)

в yii есть

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

Yii::getPathOfAlias('application.uploads');
 
как с этим быт в yii2 и как их использовать ? Смотрю вроде setAlias или getAlias

кстати файлы можно загружать как на кокбуке yii1.
точно так же
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: yii2 загрузка файла

Сообщение samdark »

Yii::getAlias('app/uploads')
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: yii2 загрузка файла

Сообщение asset »

Sam Dark писал(а):Yii::getAlias('app/uploads')
Спасибо. хорошо что док есть ;)
agrail
Сообщения: 107
Зарегистрирован: 2011.06.19, 23:19

Re: yii2 загрузка файла

Сообщение agrail »

у меня не получается заставить работать FileValidator. У кого-то получилось? я вот даже issue создал, пока правда не ответил никто - https://github.com/yiisoft/yii2/issues/2330
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: yii2 загрузка файла

Сообщение vova07 »

Вроде нет там никаких проблем. В виджете fileAPI делал валидацию, все работает.
Как вы сохраняете файлы, что в контролере?
agrail
Сообщения: 107
Зарегистрирован: 2011.06.19, 23:19

Re: yii2 загрузка файла

Сообщение agrail »

так в контроллере ничего и не должно быть вроде, все стандартно

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

public function actionUpdate($id)
    {
        $model = $this->loadModel($id, Banner::className());

        if ($model->load($_POST) && $model->save()) {
            return $this->redirect(['index']);
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    } 
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: yii2 загрузка файла

Сообщение vova07 »

Код стандартный но есть один момент, в Yii2 'yii\validators\FileValidator' в отличии от Yii1, не делает автоматическое присваивание для проверяемого атрибута. С учетом ваших настроек, вы должны получать ошибку об остутсвии файла, это один. Второй момент может заключатся в вашем методе загрузки файла, так как если это делается после валидации модели, то ошибок в свою очередь никаких не будет, так как сама валидация уже прошла.

П.С. Эти моменты в доках не озвучены, но это не мешает нам посмотреть исходники и понять логику работы.
Кстати вполне возможно что "FileValidator" из-за конкретно данной ситуации нужно улучшить.
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: yii2 загрузка файла

Сообщение asset »

Раз подняли тему вкладываю код,такой же как на рецепте с некоторым изменением.

controller

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

<?php

namespace app\controllers;

use Yii;
use yii\BaseYii;
use yii\web\UploadedFile;
use app\models\Upload;


class LoadController extends \yii\web\Controller
{
    public function actionIndex()
    {   
        $dir = Yii::getAlias('@app/uploads');
        $uploaded = false;
        
        $model = new Upload();
        
        if($model->load($_POST)) {
        
           $file = UploadedFile::getInstance($model,'file');
           
           if($model->validate()) {
           $uploaded = $file->saveAs($dir . '/' .'test'  );
        
           }
        }
        
        return $this->render('index',[
             'model' => $model,
             'uploaded' => $uploaded,
             'dir' => $dir,
           ]);
    }

}

model

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

<?php

namespace app\models;

use Yii;
use yii\base\Model;

class Upload extends Model
{
    public $file;
    
    public function rules()
    {
        return [
            
            ['file','file','types'=> ['rar']],

        ];
    }
}
view

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

<?php
/**
 * @var yii\web\View $this
 */

 use yii\helpers\Html;

?>
<h1>load/index</h1>

<p>
    Yii2
    
     <?php if($uploaded): ?>
      <p> Файл успешно загружен. Проверьте <?php echo $dir ?> . </p>
       <?php endif; ?>
       <?php echo Html::beginForm('','post',['enctype' => 'multipart/form-data']) ?>
        <?php echo Html::error($model,'file') ?>
         <?php echo Html::activeFileInput($model,'file') ?>
         <?php echo Html::submitButton('Upload') ?>
         <?php Html::endForm() ?>
         

                                
</p>

agrail
Сообщения: 107
Зарегистрирован: 2011.06.19, 23:19

Re: yii2 загрузка файла

Сообщение agrail »

да, я уже разобрался, дело дейтсвительно оказалось в том что теперь надо вручную в контроллере присваивать файл. не думаю, что это более удобно чем в yii-1. Контроллеры будут толще
Apa
Сообщения: 2
Зарегистрирован: 2014.07.02, 22:45

Re: yii2 загрузка файла

Сообщение Apa »

Небольшое уточнение. В связи с последними изменениями вместо

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

['file','file','types'=> ['rar']]
надо писать

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

['file','file','extensions'=> ['rar']]
FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: yii2 загрузка файла

Сообщение FOMINTIMUR »

Доброго времени суток! Кто-нибудь использует https://github.com/2amigos/yii2-file-upload-widget. Никак не выходит. При загрузке файла возникает ошибка
Error SyntaxError: Unexpected token <
FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: yii2 загрузка файла

Сообщение FOMINTIMUR »

FOMINTIMUR писал(а):Доброго времени суток! Кто-нибудь использует https://github.com/2amigos/yii2-file-upload-widget. Никак не выходит. При загрузке файла возникает ошибка
Error SyntaxError: Unexpected token <
Ай, в общем решил таким костылем:

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

<td>
            <p class="name">
                {% if (file.url) { %}
                    <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" {%=file.thumbnailUrl?'data-gallery':''%}>{%=file.name%}</a>
                {% } else { %}
                    <span>{%=file.name%}</span>
                {% } %}
            </p>
            {% if (file.error!="SyntaxError: Unexpected token <") { %}
                <div><span class="label label-danger">Error</span> {%=file.error%}</div>
            {% } %}
        </td>
        <td>
в download.php
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: yii2 загрузка файла

Сообщение Faenir »

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

{% if (file.error!="SyntaxError: Unexpected token <") { %}
    <div><span class="label label-danger">Error</span> {%=file.error%}</div>
{% } %} 
Это гениально :D
Robert
Сообщения: 1
Зарегистрирован: 2015.07.01, 15:31

Re: yii2 загрузка файла

Сообщение Robert »

Скажите, пожалуйста, как провести проверку на то что файл прикреплен?
Сделал все по примеру выше, все работает. Но если не прикрепить файл, то метод ->saveAs естественно выводит ошибку. Получается $model->validate отдает true даже если файла нет. если в rules добавить правило [['file',], 'required'], то валидация вообще не проходит ...
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: yii2 загрузка файла

Сообщение lynicidn »

if ($this->File instanceof UploadedFile)
Ответить