qodenl / laravel-posthog
Laravel implementation for Posthog
Installs: 21 896
Dependents: 0
Suggesters: 0
Security: 0
Stars: 23
Watchers: 2
Forks: 4
Open Issues: 3
Requires
- php: ^8.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0
- laravel/pennant: ^1.12
- posthog/posthog-php: ^3.0
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- roave/security-advisories: dev-latest
README
This package provides a simple integration of Posthog in Laravel applications.
The package covers both Identify as Capture (events) requests which can be triggered manual or automatically using an Event Listener.
You can also easily integrate Feature Flags within your application.
This package uses the PostHog / posthog-php package. For more information about Posthog, check their documentation.
Installation
You can install the package via composer:
composer require qodenl/laravel-posthog
You can publish the config file with:
php artisan vendor:publish --provider="QodeNL\LaravelPosthog\PosthogServiceProvider"
After publishing the content, set your API key and Host in your .env file:
POSTHOG_KEY= POSTHOG_HOST=https://posthog.com POSTHOG_ENABLED=true
Make sure you copy the correct host from Posthog.
Posthog is enabled by default, but you can disable it with the POSTHOG_ENABLED env variable.
Make sure to disable Posthog for local/testing environments.
Usage
Manual events
use QodeNL\LaravelPosthog\Facades\Posthog; Posthog::capture('event name', ['property' => 'value']);
Automatic events
You can add the PosthogListener::class
listener to your EventServiceProvider
. The package will create an capture automatically when the event happens.
By default, all fillable
attributes from a model (available in the event) will be sent to Posthog as properties.
You can specify which attributes you want to send to Posthog by adding a PosthogAttributes
property to your Model.
public $posthogAttributes = [ 'first_name', 'last_name', ];
Attributes in the hidden
property will always be ignored.
Identify
Events will be sent to Posthog with a unique ID for anonymous users. When the user is recognized (usually on log in),
you should trigger the identify
method to link the unique ID to the user.
You can pass additional information about the user to be stored in his profile.
use QodeNL\LaravelPosthog\Facades\Posthog; Posthog::identify('email@user.com', ['first_name' => 'John', 'last_name' => 'Doe']);
Alias
If you want to assign a session ID to a user (for example a front-end session ID) you can use the alias
method.
The Session ID argument will be assigned to the auto-generated ID of the user.
Posthog::alias('Session ID here');
Feature flags
Laravel Pennant
This package also includes a custom driver for the Laravel Pennant package. With this custom driver, you can use Laravel Pennant and listen to the feature flags set in Posthog.
To use this driver, simply add the following to your .env file. You don't need to create the database migration.
PENNANT_STORE=posthog
Also, add the store to the stores
array in config/pennant.php
:
'stores' => [ 'posthog' => [ 'driver' => 'posthog', ], ],
You can use the Laravel Pennant package as you would normally do. However, some features, like enabling a feature for a user, are not supported by the Posthog driver. A PosthogFeatureException
will be thrown when you try to use these features.
Example: Check if feature is enabled
Laravel\Pennant\Feature::active('myFeatureFlagKey'); // true
Check feature flags
If you don't want to use Laravel Pennant, you can also implement the feature flags using our Facade:
Get all feature flags
use QodeNL\LaravelPosthog\Facades\Posthog; Posthog::getAllFlags();
Get all feature flags with boolean if enabled for user or not.
Check if feature is enabled
use QodeNL\LaravelPosthog\Facades\Posthog; Posthog::isFeatureEnabled('myFeatureFlagKey');
Check if feature is enabled for user. Returns boolean.
Get feature flag
use QodeNL\LaravelPosthog\Facades\Posthog; Posthog::getFeatureFlag('myFeatureFlagKey');
Get feature flag. Returns false
if feature is disabled. Returns true
(or payload
if set).
Optional attributes
You can pass groups
, personProperties
and groupProperties
to the isFeatureEnabled and getFeatureFlag functions.
Please check the Posthog PHP documentation for more information.
In the Posthog config you can configure if events should be sent to Posthog and if you want to evaluate events locally.
Queue / jobs
The capture, identify and alias actions are executed by jobs. Be sure you've enabled and configured queues for your applications.
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
- Christian Schoenmakers (Qode BV - Netherlands) (https://github.com/christianschoenmakers)
License
The MIT License (MIT). Please see License File for more information.