【问题标题】:Yii2 Trying to get property 'chnmem_stid' of non-objectYii2 试图获取非对象的属性“chnmem_stid”
【发布时间】:2018-09-16 16:39:54
【问题描述】:

我正在使用 Yii2 Advanced,但出现此错误

Trying to get property 'chnmem_stid' of non-object

错误在$isMember->chnmem_stid中的这个函数中;

public function actionChannel($id)
{
    $model = $this->findModelUID($id);
    $isMember = AxChnPermission::ChnMember($model->channel_id);

    $memberStt = array(1,2,3);

    if (in_array($isMember->chnmem_stid, $memberStt))
    {
        $dataProviderPost = AxChannelProvider::ContentProviderMember ($model->channel_id);
    }
    else
    {
        $dataProviderPost = AxChannelProvider::ContentProviderGuest ($model->channel_id);
    }

    return $this->render('/channel/_viewPost', [
        'model' => $this->findModelUID($id),
        'isMember' => $isMember,
        'dataProviderPost' => $dataProviderPost,
    ]);
}

函数 AxChnPermission::ChnMember($model->channel_id);是

public static function ChnMember($chn_id)
{
    $member = ChnMember::findOne(['user_id' => Yii::$app->user->id, 'channel_id' => $chn_id]);
    return $member;
}

所以我只想返回一个结果的函数,“chnmem_stid”在模型中设置为 hasOne

    /**
 * This is the model class for table "chnmember".
 *
 * @property string $member_note
 * @property int $user_id
 * @property int $channel_id
 * @property int $channel_admin
 * @property int $chnmem_stid
 * @property string $chnmem_date
 * @property int $dsh_statut
 *
 * @property Channel $channel
 * @property User $user
 * @property ChnmemberStatut $chnmemSt
 * @property Channel $channelAdmin
 */
  /**
 * @return \yii\db\ActiveQuery
 */




public function getChnmemSt()
{
    return $this->hasOne(ChnmemberStatut::className(), ['chnmem_stid' => 'chnmem_stid']);
}

如果这个函数的返回值为NULL,就会出现错误

public static function ChnMember($chn_id)
{
    $member = ChnMember::findOne(['user_id' => Yii::$app->user->id, 'channel_id' => $chn_id]);
    return $member;
}

【问题讨论】:

    标签: yii2 yii2-advanced-app


    【解决方案1】:

    您的函数AxChnPermission::ChnMember() 可能会返回null(如果请求的记录不存在)。这可能就是这种情况,因为错误消息说$isMember 不是对象。您需要对这种情况进行额外检查:

    $isMember = AxChnPermission::ChnMember($model->channel_id);
    if ($isMember === null) {
        // throw exception?
    }
    

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多