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

Yii2 / ActiveRecord / Почему появляется ошибка Setting unknown property?

Собственно, очередной раз обращаюсь к тостеровцам)
При сохранении модели появляется ошибка "Setting unknown property".
Код Модели:
class Media extends \yii\db\ActiveRecord
{
    public static function tableName()
    {
        return 'media';
    }
    public function rules()
    {
        return [
            [['type'], 'required'],
            [['project', 'sizes'], 'string'],
            [['parent_id', 'author_id', 'filesize', 'width', 'height', 'timeu_add'], 'integer'],
            [['type'], 'string'],
            [['filename', 'filename_original', 'path', 'thumbnail', 'thumbnail_url', 'thumbnail_path'], 'string', 'max' => 255]
        ];
    }
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'project' => 'Project',
            'type' => 'Type',
            'parent_id' => 'Parent ID',
            'author_id' => 'Author ID',
            'filename' => 'Filename',
            'filename_original' => 'Filename Original',
            'filesize' => 'Filesize',
            'width' => 'Width',
            'height' => 'Height',
            'path' => 'Path',
            'thumbnail' => 'Thumbnail',
            'thumbnail_url' => 'Thumbnail Url',
            'thumbnail_path' => 'Thumbnail Path',
            'images' => 'Images',
            'timeu_add' => 'Timeu Add',
        ];
    }
}

Часть кода контроллера, где появляется ошибка:
public function actionUploadFile() {
        Yii::trace('actionUploadFile start');
        if (isset($_FILES['file'])) {
            Yii::trace('actionUploadFile _FILES inner');
            $file = \yii\web\UploadedFile::getInstanceByName('file');

            $model = new Media();

            if(isset($_GET['parent_id'])) $model->setAttribute('parent_id',$_GET['parent_id']);
            if(isset($_GET['project']))   $model->setAttribute('project',  $_GET['project']);

            $model->setAttribute('type',$file->type);
            $model->setAttribute('filename_original', $file->name);

            Yii::trace('actionUploadFile model-project = '. $model->project);

            if($model->save()) {
                Yii::trace('actionUploadFile model saved');
                // модель создана, получим id
                $model->filename = MediaHelper::generateName( $model , ['isOriginal'=>1] );
                $model->$path = Yii::$app->params['media']['path']['original'] . $model->filename; /* В этой строке ошибка*/

                $model->save();

                Yii::trace( 'actionUploadFile path alias = ' . Yii::getAlias($model->$path) );

                if($file->saveAs( Yii::getAlias($model->$path) )) {
                    Yii::trace('actionUploadFile file save = ' . $model->$path );
                    // файл созранен

                    $model->setAttribute('filesize', filesize( Yii::getAlias($model->$path) ) );
                    $model->save();
                    MediaHelper::getThumbnail($model);
                    //echo \yii\helpers\Json::encode($file);
                }
            }
        }
    }

Строку с ошибкой пометил, сама ошибка:
exception 'yii\base\UnknownPropertyException' with message 'Setting unknown property: common\models\Media::' in C:\www\domains\blogs_project\vendor\yiisoft\yii2\base\Component.php:197
Stack trace:
#0 C:\www\domains\blogs_project\vendor\yiisoft\yii2\db\BaseActiveRecord.php(266): yii\base\Component->__set('', '@media/original...')
#1 C:\www\domains\blogs_project\backend\controllers\MediaController.php(69): yii\db\BaseActiveRecord->__set('', '@media/original...')
#2 [internal function]: backend\controllers\MediaController->actionUploadFile()
#3 C:\www\domains\blogs_project\vendor\yiisoft\yii2\base\InlineAction.php(55): call_user_func_array(Array, Array)
#4 C:\www\domains\blogs_project\vendor\yiisoft\yii2\base\Controller.php(151): yii\base\InlineAction->runWithParams(Array)
#5 C:\www\domains\blogs_project\vendor\yiisoft\yii2\base\Module.php(455): yii\base\Controller->runAction('upload-file', Array)
#6 C:\www\domains\blogs_project\vendor\yiisoft\yii2\web\Application.php(83): yii\base\Module->runAction('media/upload-fi...', Array)
#7 C:\www\domains\blogs_project\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#8 C:\www\domains\blogs_project\backend\web\index.php(18): yii\base\Application->run()
#9 {main}

Оно пытается сохранить поле path, но по какой-то причине оно его не видит. Поле path в бд присутствует, в rules описано. В чем загвоздка? Буду очень благодарен за помощь!
  • Вопрос задан
  • 13663 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
zetamen
@zetamen
В поисках нового
Перед path знак доллара уберите
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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