php PostHog命名空间问题

utugiqy6  于 2022-12-17  发布在  PHP
关注(0)|答案(2)|浏览(121)

我在我的PHP代码库中安装了PostHog,并尝试按照此链接(https://posthog.com/docs/integrate/server/php)中的教程使用它。
我尝试调用PostHog::init函数,如下所示:

PostHog::init($apikey,
        array('host' => $baseUrl,
            "debug" => true)
    );

但我在此行PostHog::init中遇到错误,错误内容为

"Attempted to load class PostHog" from the global namespace. Did you forget a "use" statement?"

实际上,我已经在使用下面的“use”了“use PostHog\PostHog;“,但我仍然得到这个错误。我可以确认postog库是intall,因为我可以从我的代码库中读取postog库中的classess。

这是有关我的应用程序的详细信息:

  • 我使用Symfony framework 5,应用程序部署在docker中。我使用PHP 7.4和posthog/posthog-php”:“2.1.1”。
  • 我检查了供应商文件夹,PostHog在那里(见随附照片)x1c 0d1x
  • 我在使用PostHog函数(如init、capture等)的地方实现了服务调用PosthogHandler。我从控制器调用函数的服务。但问题是在PostHog初始化阶段,错误出现在PostHog::init行的PosthogHandler构造函数中。这是我的PosthogHandler服务类:
<?php
    declare(strict_types=1);
    
    namespace App\Posthogs;
    
    use PostHog\PostHog;
    use App\User\User;
    
    class PosthogHandler
    {
        public function __construct($env, string $key, string $baseUrl)
        {
    
            PostHog::init($key,
                array('host' => $baseUrl,
                    "debug" => true)
            );
    
        }
    
        public function addEvent(string $eventName, User $user){
    
            PostHog::capture(array(
                'distinctId' => $user->getId()->id(),
                'event' => $eventName
            ));
        }
    
    }

任何帮助,为什么我得到以上的错误?

uurity8g

uurity8g1#

该错误表明无法正确自动加载类文件。您可能需要首先通过创建测试文件来检查vendor/autoload.php中是否存在PostHog

<?php
require_once 'vendor/autoload.php';
var_dump(class_exists('Posthog\Posthog'));

如果没有,则应尝试以下命令

composer dump-autoload
yiytaume

yiytaume2#

真管用!
我在(1)前端(1)控制器(3)服务中有三个供应商文件夹。
以前,我只在使用PostHog函数的服务文件夹中安装了PostHog库。尽管PostHog库出现在供应商文件夹中,但这似乎并不起作用。
当我在控制器文件夹中安装了posthog库时,它起作用了,错误消失了。我根本不使用posthog,我不知道为什么我需要在控制器文件夹中安装posthog库才能工作。但最终它起作用了!

相关问题