skip to Main Content

I installed PostHog in my PHP codebase, and trying to use it by following the tutorial in this link (https://posthog.com/docs/integrate/server/php).

I am attempting to call PostHog::init function as a following:

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

But I am getting error in this line PostHog::init, the error says

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

In fact, I am already using the "use" as following "use PostHogPostHog;", but I am still getting this error. I can confrim that the Posthog library is intall becuase I can read the classess in Poshog library from my codebase.

This is more info about my app:

  • I use Symfony framework 5 and the app is deployed in docker. I use PHP 7.4 and posthog/posthog-php": "2.1.1".

  • I checked the vendor folder and PostHog is there (see photo attached) here

  • I implemented service call PosthogHandler where I use PostHog functions (like init, capture and etc). I am calling functions’ services from controller. But the issue is that the error appear in the PosthogHandler constructor in line PostHog::init, at PostHog initialisation stage. This is my PosthogHandler service class:

<?php
    declare(strict_types=1);
    
    namespace AppPosthogs;
    
    use PostHogPostHog;
    use AppUserUser;
    
    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
            ));
        }
    
    }

Any help, why I am getting above error?

2

Answers


  1. Chosen as BEST ANSWER

    It works!

    I have three vendor folders in (1) Frontend (1) Controller (3) Services.

    Before, I only installed the PostHog library in services folder where I use PostHog functions. This didn't seem working despite the posthog lib appeared in vendor folder.

    What it makes work and the error disappears when I installed the posthog lib in controller folder. I don't use posthog in controller at all, I am not sure why I need to install the posthog lib in controller folder in order to work. But eventually it works!


  2. The error indicates that your class file could not be autoloaded properly. You might want to check first that PostHog is present in vendor/autoload.php by creating a test file to check

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

    If not you should try this command

    composer dump-autoload
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search