@prozrost

Почему данные не сохраняются?

Хочу сохранить данные пришедшие из формы, вот метод в контроллере
public function actionCreate()<br>
    {<br>
        $model = new Post();<br>
        if ($model->load(\Yii::$app->request->post()) && $model->validate()) {<br>
            $model->user_id = \Yii::$app->user->getId();<br>
            $model->created_at = \Yii::$app->formatter->asDate(new \DateTime(),'php:Y-m-d');<br>
            $model->image = UploadedFile::getInstance($model, 'image');<br>
            if($model->upload()) {<br>
                $model->image = ('web/images/' . $model->image->baseName . '.' . $model->image->extension);<br>
            } else {<br>
                $model->image = null;<br>
            }<br>
            $model->save();<br>
            return $this->redirect(['site/blog']);<br>
        } else {<br>
            return $this->render('blog/create', ['model' => $model]);<br>
        }<br>
    }

и сама модель:
class Post extends ActiveRecord
{
    public $title;
    public $text;
    public $image;
    public $comments;

    public function rules()
    {
        return [
            [['title', 'text'], 'required'],
            [['image'], 'file',  'extensions' => 'png, jpg'],
        ];
    }
    public function upload()
    {

        if ($this->image->saveAs(\Yii::getAlias('@app') .'\web\images\\' . $this->image->baseName . '.' . $this->image->extension))
            return true;
        else {
            return false;
        }
    }
    public function getComments()
    {
        return $this->hasMany(Comment::className(), ['post_id' => 'id']);
    }
    public function getUser()
    {
        return $this->hasOne(User::className(),['id' => 'user_id']);
    }
}


Но теперь при отправлении формы сохраняются только created_at,user_id и все. Тоесть те поля которые я задал явно. ЧТо не так?
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 2
@karminski
Senior React.JS Developer
Зачем в модели явное объявление атрибутов? Удалите все public атрибуты.
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
В модели добавить метод
public function behaviors()
{
     return [
       TimestampBehavior::className()
    ];
}

В контроллере удалить
$model->created_at = \Yii::$app->formatter->asDate(new \DateTime(),'php:Y-m-d');

Заменить
$model->user_id = \Yii::$app->user->getId();
на
$model->user_id = Yii::$app->user->identity->id;
И в начале контроллера добавить
use Yii;
а слеш перед Yii везде удалить.
Какие поля ещё Вы передаёте?
Изображение может не проходит валидацию, поэтому не сохраняется. Выделите весь код, который отвечает за загрузку изображения в отдельную модель.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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