Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Ab Laravel Package

filipe07/laravel-ab

View on GitHub
Deep Wiki
Context7

Build Release

This package helps you to find out which content works on your site and which doesn't.

It allows you to create experiments and goals. The visitor will receive randomly the next experiment and you can customize your site to that experiment. The view and the goal conversion will be tracked and you can view the results in a report.

This package is very inspired and a mix of two other packages:

Installation

This package can be used in Laravel 8 or higher.

You can install the package via composer:

composer require filipe07/laravel-ab

Config

After installation publish the config file:

php artisan vendor:publish --provider="AbTesting\AbTestingServiceProvider"

You can define your experiments and goals in there.

Finally, run the newly added migration

php artisan migrate

Two new migrations should be added.

Usage

Variants

@if (AbTesting::isVariant('logo-big'))

    <div class="logo-big"></div>

@elseif (AbTesting::isVariant('logo-grayscale'))

    <div class="logo-greyscale"></div>

@elseif (AbTesting::isVariant('brand-name'))

    <h1>Brand name</h1>

@endif

That's the most basic usage of the package. You don't have to initialize anything. The package handles everything for you if you call isVariant

Alternatively you can use a custom blade if statement:

@ab('logo-big')

    <div class="logo-big"></div>

@elseab('logo-grayscale')

    <div class="logo-greyscale"></div>

@elseab('brand-name')

    <h1>Brand name</h1>

@endab

This will work exactly the same way.

If you don't want to make any continual rendering you can call

AbTesting::pageView()

directly and trigger a new page view with a random variant. This function will also be called from isVarian.

Under the hood a new session item will keep track of the current variant. A session will only get one variant and only trigger one page view.

You can grab the current variant with:

// get the underlying model
AbTesting::getVariant()

// get the variant name
AbTesting::getVariant()->name

// get the visitor count
AbTesting::getVariant()->visitors

Alternatively there is a request helper for you:

public function index(Request $request) {
    // the same as 'AbTesting::getVariant()'
    $request->abVariant()
}

Goals

To complete a goal simply call:

AbTesting::completeGoal('signup')

The function will increment the conversion of the goal assigned to the active variant. If there isn't an active variant running for the session one will be created. You can only trigger a goal conversion once per session. This will be prevented with another session item. The function returns the underlying goal model.

To get all completed goals for the current session:

AbTesting::getCompletedGoals()

Persisting visitor data

When used in the above way the visitor data is stored in session data attached to the user. In some cases you might want to trigger a goal completion in an asynchronous way and the users session won't be available. To avoid getting bad data by registering the goal completion under a new variant you can persist the visitor data in the database.

To do this you pass a user identifier to the pageview function.

AbTesting::pageview($identifier)

In your asynchronous request you can then provide the same idenfier to the completeGoals function.

AbTesting::completeGoal('payment-completed', $identifier)

Report

To get a report of the page views, completed goals and conversion call the report command:

php artisan ab:report

This prints something like this:

+---------------+----------+-------------+
| Variant       | Visitors | Goal signup |
+---------------+----------+-------------+
| big-logo      | 2        | 1 (50%)     |
| small-buttons | 1        | 0 (0%)      |
+---------------+----------+-------------+

Reset

To reset all your visitors and goal completions call the reset command:

php artisan ab:reset

Events

In addition you can hook into two events:

  • VariantNewVisitor gets triggered once an variant gets assigned to a new visitor. You can grab the variant and visitor instance as properties of the event.
  • GoalCompleted gets triggered once a goal is completed. You can grab the goal as a property of the event.

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email moin@benjaminbortels.de instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Laravel Package Boilerplate

This package was generated using the Laravel Package Boilerplate.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle