2016-09-19 23:54:49 2641次浏览 3条回答 0 悬赏 10 金钱

在使用yii2-start-kit,修改个人信息相关程序。

public function actionProfile()
{
  //  $model = new UserProfile;//使用这个也不对
  $model = Yii::$app->user->identity->userProfile;//这里
    if ($model->load($_POST) && $model->save()) {
        Yii::$app->session->setFlash('alert', [
            'options'=>['class'=>'alert-success'],
            'body'=>'修复的信息已经保存!'
        ]);
        return $this->refresh();
    }
    return $this->render('profile', ['model'=>$model]);
}

就是这句 $model = Yii::$app->user->identity->userProfile;
它什么时候塞进去,就是找不到。按说应该是登录后塞进去的,相关登录代码,afterlogin啊都找不到。

有熟悉的yii2-start-kit的兄弟帮忙看下

补充于 2016-09-20 00:06

而且把他换成 $model = UserProfile::find()->where('id='.Yii::$app->user->identity->id);
也还是不能运行

最佳答案

  • axlrose 发布于 2016-09-20 09:11 举报

    yii2-starter-kit/common/models/User.php 文件有个 getUserProfile方法

    6 条回复
    回复于 2016-09-20 17:12 回复

    对,是有这个方法,查了下,没有找打哪个对象调用了这个getUserProfile方法,可能我基础不好的缘故。。。

    回复于 2016-09-20 17:51 回复

    看看文档中http://www.yiichina.com/doc/guide/2.0/db-active-record 【查询关联的数据】这部分

    回复于 2016-09-20 21:26 回复

    这个是yii框架的机制,通过魔术方法 \yii\baseObject::__get()来实现的

    回复于 2016-09-20 22:34 回复

    看懂了。写了关联之后,在取得了user的时候,就把关联的UserProfile也拿了出来。这句代码终于理解了,谢谢你们!

    回复于 2016-09-20 22:42 回复

    然后我的程序还是不对。我修改了原系统中userProfile模型对应的数据库表和相应的rule,也修改了User对应关系,以及相应的view。然后报错就是yii2\base\Model.php 的 public function scenarios(),哪不对了???

    回复于 2016-09-20 23:40 回复

    经过一系列的“测试”,在UserProfile模型中加入了
    public function scenarios()
    {

       return [
          'update' => ['id', 'name''picture'],
       ];
    

    }
    然后控制器里加

       $model = Yii::$app->user->identity->userProfile;
       $model->setScenario('update');
    

    也就是自己加了个场景,代码就正常了。但是原UserProfile并没有这个也正常运行的呢,哎找不出原因。。。

  • 回答于 2016-09-20 00:40 举报

    看看user对应model的userProfile属性

    1 条回复
    回复于 2016-09-20 17:11 回复

    看了很多遍了,USER没有这个userProfile属性,貌似哪里挂进去的,就是找不到

  • 回答于 2016-09-20 11:00 举报

    $model = UserProfile::find()->where('id='.Yii::$app->user->identity->id)->one();

    1 条回复
    回复于 2016-09-20 17:10 回复

    还是一样的错误,感觉这样拿出的数据结构和Yii::$app->user->identity->userProfile;拿出的出局结构不同,
    导致“Invalid argument supplied for foreach()”错误

您需要登录后才可以回答。登录 | 立即注册
搞搞的传奇
见习主管

搞搞的传奇

注册时间:2015-02-24
最后登录:2020-06-04
在线时长:24小时46分
  • 粉丝8
  • 金钱5
  • 威望10
  • 积分345

热门问题