Yii2:$ model-> load()返回false

时间:2017-03-21 15:24:02

标签: php yii2

我有一个用户可以加载图像的表单。在我的控制器中,我有一个名为 actionUpdate 的动作,其中包含这样的代码 的控制器

public function actionUpdate()
{
    $id = Yii::$app->user->id;
    $model = Page::find()->where(['user_id'=>$id])->one();
    if ($model->load(Yii::$app->request->post()))
    {
        $image = UploadedFile::getInstance($model, 'thumbnail');
        $model->thumbnail = $model->url.".".$image->extension;

        if ($model->validate() && $model->save())
        {
            $model->upload();
            //page/url is for the user's page
            return $this->redirect('page/'.$model->url);
        } 
    } 
    else 
    {
        //'update' is a view file with form
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}

当我提交表单时,我被重定向到相同的更新操作网址,但屏幕为空白,而不是重定向到用户的页面。也许问题出在我的模型上传功能中?
模型

public function upload()
{
    if ($this->validate()) {
        $user = Page::find()->where(["user_id" => Yii::$app->user->id])->one();
        $this->thumbnail->saveAs('avatars/'.$user->url.'.'.$this->thumbnail->extension);
        return true;
    } else {
        return false;
    }
}

3 个答案:

答案 0 :(得分:2)

也可能是您的验证或保存不返回true

    if ($model->validate() && $model->save())
    {
        $model->upload();
        //page/url is for the user's page
        return $this->redirect('page/'.$model->url);
    }  else {

        var_dump('not  validated or not saved ')
    }

答案 1 :(得分:1)

请在您的模型中进行异常处理(尝试,捕获)。永远不要在没有异常处理的情况下编写Model。

在你的机器中配置yii_logger db(你可以找到Yii2文档)。

然后运行

SELECT FROM_UNIXTIME(log_time, '%Y-%m-%d') log_date, y.*  FROM yii_logger y where level = 1 order by log_time desc limit 20;

如果您的代码在某个地方出现故障,您可能会看到错误回溯。

答案 2 :(得分:0)

更新actionUpdate中的代码

$model->upload($image);

并在您的模型上传功能

public function upload($image)
{
    if ($this->validate()) {
        $user = Page::find()->where(["user_id" => Yii::$app->user->id])->one();
        // updated with parameter here
        $image->saveAs('avatars/'.$user->url.'.'.$image->extension);
        return true;
    } else {
        return false;
    }
}

请在您的代码中更新此内容并进行检查。