2015-07-01 17:46:29 3367次浏览 4条回答 0 悬赏 10 金钱

有些会员信息,每次都需要从数据库中获取,这一块做在init里,这样就不用重复写代码了。只需要在特定的action里编辑一些单独的逻辑就可以了,但在action里render的时候的时候,由于已经不在init里面了,这时如何将信息传递给视图?(使用方法变量临时保存除外 )

public function init() {
    //这里是一些全局操作,如获取用户基本信息,并赋值给相应的请求action视图
    //@todo...
}

public function actionView($id)
{
    $model = Post::findOne($id);
    //渲染一个名称为"view"的视图
    return $this->render('view', [
        'model' => $model,
    ]);
}

以前用其它框架的时候,是在每一个方法里直接assign给视图就可以了,不存在这个问题

  • 回答于 2015-07-01 18:35 举报

    可以尝试session或者cache

    1 条回复
    回复于 2015-07-02 09:05 回复

    解决方案复杂化了

  • 回答于 2015-07-01 20:01 举报

    如果下面的办法不能用那就只能用缓存或SESSION或cookies了

    public function actionView($id)
    {
        //渲染一个名称为"view"的视图
        return $this->render('view', [
            'model' => $this->findOne($id),
        ]);
    }
    
    public function findOne($id)
    {
        return Post::findOne($id);
    }
    
    2 条回复
    回复于 2015-07-02 09:06 回复

    这种方法也想了,但还是有些重复操作了,每次都要操作findOne,再与其它记录集merge, 最后render,应该还有更好的办法的吧,这种需求还是特别常见的

    回复于 2015-07-02 09:58 回复

    试试用行为试试

  • 回答于 2015-07-03 17:29 举报

    在yii\web\view命名空间下View类中, 有一个事件beforeRender这个事件, 可以组合你的输出到视图中的参数. 再利用行为 应该可以解决

    1 条回复
    回复于 2015-07-04 22:20 回复

    方案都复杂化了,现在直接用js来临时解决了

  • 回答于 2015-07-05 22:07 举报

    不用变量保存?那你每次要用的数据从哪来?
    又去数据库里读一次?
    不想重写代码,就写个方法,要用基础数据就调用这个方法咯。
    怕反复读数据库?设置缓存咯。

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

cfanbo

注册时间:2015-05-23
最后登录:2015-09-10
在线时长:11小时52分
  • 粉丝2
  • 金钱110
  • 威望0
  • 积分220

热门问题