如何第三方应用程序访问Yii2(HumHub)

时间:2016-09-23 21:55:30

标签: php yii2

我想让第三方PHP应用程序访问Yii2用户数据(HumHub),并试过这个:

    function getUserId() {
      require_once('../protected/vendor/yiisoft/yii2/Yii.php');
      $yiiConfig = require('../protected/config/common.php');
      (new humhub\components\Application($yiiConfig));
      $user = Yii::$app->user->identity;

      return $user;
    }

这不起作用。在new humhub\components\Application($yiiConfig)之前没有错误,但第三方应用程序中断时没有抛出任何错误,并且该函数不会返回任何内容。

我确实发现this solution不起作用。

是否有理由不起作用或是否有正确获取Yii2用户数据的替代解决方案?

2 个答案:

答案 0 :(得分:0)

这是在HumHub V1.0中如何做到的

    require_once('../protected/vendor/yiisoft/yii2/Yii.php');
    $config = yii\helpers\ArrayHelper::merge(
        require('../protected/humhub/config/common.php'),
        require('../protected/humhub/config/web.php'),
        (is_readable('../protected/config/dynamic.php')) ? require('../protected/config/dynamic.php') : [],
        require('../protected/config/common.php'),
        require('../protected/config/web.php')
    );
    new yii\web\Application($config); // No 'run()' invocation!

现在我可以获得$ user对象:

   $user = Yii::$app->user->identity;

答案 1 :(得分:0)

确实应该抛出错误,但是,PHP的错误设置可能会被覆盖或设置为不显示错误。

您调用未定义的对象Yii::$app->user->identity。原因是documentation,因为你还没有初始化Yii对象。所以你的代码应该如下:

function getUserId() {
      require_once('../protected/vendor/yiisoft/yii2/Yii.php');
      $yiiConfig = require('../protected/config/common.php');
      (new humhub\components\Application($yiiConfig)); // try to comment this line too if it does not work
      // Add The Following Line
      new yii\web\Application($yiiConfig); // Do NOT call run() here
      $user = Yii::$app->user->identity;

      return $user;
    }