villiwalla
@villiwalla
HTML-верстка

Почему не сохраняется запись с загружаемым файлом?

Когда создаю новую запись, она не сохраняется если ещё загружать файл. В итоге нету id записи на который редиректить, если исключить работу с файлами то запись создается и отправляет на вьюху просмотра.
Вот так выглядит модель:
class Journal extends \yii\db\ActiveRecord
{

    const SCENARIO_CREATE = 'create';
    const SCENARIO_UPDATE = 'update';

    public function scenarios()
    {
        $scenarios = parent::scenarios();
        $scenarios[self::SCENARIO_CREATE] = ['title', 'preview'];
        $scenarios[self::SCENARIO_UPDATE] = ['title'];
        return $scenarios;
    }

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'journal';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['title', 'preview'], 'required', 'on' => self::SCENARIO_CREATE],
            [['title'], 'required', 'on' => self::SCENARIO_UPDATE],
            [['content'], 'string'],
            [['created_at', 'updated_at'], 'safe'],
            [['title', 'preview'], 'string', 'max' => 150],
            [['description'], 'string', 'max' => 250],
            [['url'], 'string', 'max' => 70],
            [['preview'], 'file', 'extensions' => 'png, jpg, jpeg, gif', 'skipOnEmpty' => true]
        ];
    }
....


Метод контроллера создания новой записи:
public function actionCreate()
    {
        $this->view->title = 'Создание статьи';
        $this->view->params['breadcrumbs'][] = ['label' => 'Журнал', 'url' => ['panel/journal']];
        $this->view->params['breadcrumbs'][] = $this->view->title;

        $model = new Journal(['scenario' => Journal::SCENARIO_CREATE]);

        if ($model->load(Yii::$app->request->post())) {
            $model->content = Html::decode($model->content);
            $model->url = Translit::t($model->title);
            $model->preview = UploadedFile::getInstance($model, 'preview');

            $path = Yii::$app->params['uploads_path'].'/journal/preview/';
            $model->preview->saveAs($path.$model->preview->name);

            $model->save();

            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov
Web developer
if ($model->load(...)) {
    ...
    if ($model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } 
}

return $this->render('create', [
    'model' => $model,
]);
Ответ написан
Сделайте VarDumper::dump($model->getErrors(), 10, true) после попытки сохранения, посмотрите ошибки
Ответ написан
Ваш ответ на вопрос

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

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