【问题标题】:Trying to get property of non-object on Yii2试图在 Yii2 上获取非对象的属性
【发布时间】:2017-06-22 00:42:42
【问题描述】:

我想根据我使用的用户组 id 显示数据

Yii::$app->user->identity->group_id

在我的 ModelSearch 中是这样的:

$query->andFilterWhere([
        ......
        'group_id' => Yii::$app->user->identity->group_id,
        'created_date' => $this->dreated_date,
    ]);

当我在应用程序中有会话时它可以工作,但是当我没有会话时页面显示错误:

Trying to get property of non-object

对于'group_id' => Yii::$app->user->identity->group_id,

如果我没有任何会话,当我打开该页面时如何使页面重定向到登录页面。谢谢。

编辑

我加了

if (Yii::$app->user->isGuest) {
            return $this->redirect(Yii::$app->user->loginUrl);
}

在我的控制器中访问 ModelSearch 的每个操作中。

【问题讨论】:

标签: yii yii2 propertyinfo


【解决方案1】:

您可以为此操作添加访问控制过滤器。

在控制器中添加:

public function behaviors()
{
    return [
        'access' => [
            'class' => \yii\filters\AccessControl::className(),
            'only' => ['ID of your action here'],
            'rules' => [
                // allow authenticated users
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
    ];
}

或者您可以直接在动作中添加重定向 - 例如将其放在开头:

if (Yii::$app->user->isGuest) {
    return $this->redirect(Yii::$app->user->loginUrl);
}

【讨论】:

  • 我已经尝试了这两个。但它不起作用,仍然得到错误尝试获取非对象的属性。
  • 所以你做错了,因为如果你正确识别了这个错误,这意味着访客用户访问了 ModelSearch。
  • 已经可以了,我必须在控制器的每个动作中直接添加重定向。谢谢。
  • 我有 AccessControl 和 "if (Yii::$app->user->isGuest) { return $this->redirect(Yii::$app->user->loginUrl); }"在 beforeAction 中,代码进入 if 但不重定向,我得到同样的错误......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多