从控制器传递到Yii中的视图时,该值为null

时间:2018-09-24 04:48:42

标签: yii2

为什么不能将值从控制器传递给视图?该值不为null,但似乎该值未传递到视图页面。为什么?

下面是我的代码:

控制器(SiteController.php):

public function actionProfileuser()
{
    $session = Yii::$app->session;

    if($session['UserID'] == null){
        Yii::$app->user->logout();
        return $this->goHome();
    }
    else
    {
        //$model = User::find()->where(['ID'=>$session['UserID']])->all();
        //$model = new User;
        $model = (new \yii\db\Query())
            ->from('tbl_user')
            ->where(['ID' => $session['UserID']])
            ->all();
        return $this->render('profileuser', [
            'model' => $model,
        ]);
    }
}

查看(profileuser.php):

<?= $model->Name; ?>

2 个答案:

答案 0 :(得分:1)

在您的控制器中,您检索到的集合 型号all()。如果只需要一个,请使用one():

public function actionProfileuser()
{
    $session = Yii::$app->session;

    if($session['UserID'] == null){
        Yii::$app->user->logout();
        return $this->goHome();
    }
    else
    {
        //$model = User::find()->where(['ID'=>$session['UserID']])->all();
        //$model = new User;
        $model = (new \yii\db\Query())
            ->from('tbl_user')
            ->where(['ID' => $session['UserID']])
            ->one(); // <---------- use one()
        return $this->render('profileuser', [
            'model' => $model,
        ]);
    }
}

查看(profileuser.php):

<?= $model['Name']; ?>

或者使用全部,您应该遍历模式。 Fr显示所有结果:

foreach( $model AS $key => $value){

    echo $value->name;
}

答案 1 :(得分:0)

您应该使用类似于Gii生成的代码:

$model = User::findOne($session['UserID']);
if ($model === null) {
    throw new ForbiddenHttpException('You are not authorized to view this page.');
}

它将从数据库中获取User模型,如果请求的用户不存在,则会引发异常。

one()findOne()不保证它将返回非null,因此您需要自己检查它。

\yii\db\Query()用于原始查询。它不会返回您的模型。最好的情况是,您将获得一个查询结果作为数组。