Задать вопрос
@ZaurK

Почему не работает загрузка файла?

Пытаюсь разобраться с работой загрузки файла в yii2 по мануалу https://github.com/yiisoft/yii2/blob/master/docs/g... но файл не грузится,вот модель:
<?php
namespace common\models;
use Yii;
use yii\base\Model;
use yii\web\UploadedFile;
/**
 * This is the model class for table "good".
 *
 * @property integer $id
 * @property integer $catalog_id
 * @property string $gtitle
 * @property string $gdescription
 *
 * @property Catalog $catalog
 */
class Good extends \yii\db\ActiveRecord
{
     /**
     * @var UploadedFile
     */
    public $imageFile;
    
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'good';
    }
    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, jpeg'],
            [['catalog_id', 'gtitle'], 'required'],
            [['catalog_id', 'promo'], 'integer'],
            [['gdescription', 'imageFile'], 'string'],
            [['gtitle', 'imageFile'], 'string', 'max' => 255],
            [['gtitle'], 'unique'],
            [['catalog_id'], 'exist', 'skipOnError' => true, 'targetClass' => Catalog::className(), 'targetAttribute' => ['catalog_id' => 'id']],
        ];
    }
    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            //'catalog.ctitle' => 'Каталог',
            'catalog_id' =>'Альбом',
            'gtitle' => 'Заголовок',
            'gdescription' => 'Описание',
            'imageFile' => 'Изображение',
            'promo' => 'Видимость на главной',
        ];
    }
	
	public function upload()
    {
        if ($this->validate()) {
		    $this->imageFile->saveAs(Yii::getAlias('@uploads/images/') . $this->imageFile->baseName . '.' . $this->imageFile->extension);
            return true;
        } else {
            return false;
        }
    }
	
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getCatalog()
    {
        return $this->hasOne(Catalog::className(), ['id' => 'catalog_id']);
    }
}


А вот экшн для загрузки
public function actionCreate()
    {
        $model = new Good();
		
        if (Yii::$app->request->isPost) {
		    $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            if($model->upload()) {
            return $this->redirect(['view', 'id' => $model->id]);
            } else{
			return $this->redirect(['views', 'id' => $model->id]);
			}
            
        }
		return $this->render('create', ['model' => $model,]);
    }

Резульат работы такой, что почему-то условие if($model->upload()) оказывается ложным и страница редиректится на страницу views. Хотя вроде все по мануалу, но не могу понять, что тут не так. Помогите пожалуйста разобраться, где тут ошибка.
  • Вопрос задан
  • 443 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Доброй ночи.
А откуда Вы взяли такой псевдоним?
Yii::getAlias('@uploads/images/')
Если уж на то пошло, Вы определили где-то псевдоним @uploads, то путь писать надо приблизительно так
Yii::getAlias('@uploads') . '/images';
Или установите псевдоним сначала через setAlias()

p.s. Сделайте загрузку файла строго по документации, с отдельной моделью.
Ответ написан
@lem_prod
сам недавно делал, проблема в
[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, jpeg']
, я не разобрался почему, но у меня на отказ не проходило валидацию, пришлось проверять содержимое поля с файлом в методе загрузки...
для начала сделайте [['imageFile'], 'safe'], если сохранит - та же проблема.
Ответ написан
Ваш ответ на вопрос

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

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