You can install the package via composer:
composer require getsendstack/laravel-sendstack
You can publish the config file with:
php artisan vendor:publish --tag="sendstack-config"
To start using this package, you need to add environment variables for:
SENDSTACK_URL
- Optional, not really needed as this has a defaultSENDSTACK_TOKEN
- You can generate this from your getSendStack account.
The package will pick these up in its configuration and use these when it resolves an instance of the Client
.
This package can be used by injecting the SendStack\Laravel\Http\Client
into a method to instantiate the client:
declare(strict_types=1);
use App\Models\Subscriber;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use SendStack\Laravel\Contracts\ClientContract;
namespace App\Jobs\SendStack;
class SyncSubscribers implements ShouldQueue
{
use Queueable;
use Dispatchable;
use SerializesModels;
use InteractsWithQueue;
public function handle(ClientContract $client): void
{
foreach ($client->subscribers()->all() as $subscriber) {
Subscriber::query()->updateOrCreate(
attributes: ['email' => $subscriber->email],
values: $subscriber->toArray(),
);
}
}
}
Alternatively you can use the Facade to help you:
declare(strict_types=1);
use App\Models\Subscriber;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use SendStack\Laravel\Facades\SendStack;
namespace App\Jobs\SendStack;
class SyncSubscribers implements ShouldQueue
{
use Queueable;
use Dispatchable;
use SerializesModels;
use InteractsWithQueue;
public function handle(): void
{
foreach (SendStack::subscribers()->all() as $subscriber) {
Subscriber::query()->updateOrCreate(
attributes: ['email' => $subscriber->email],
values: $subscriber->toArray(),
);
}
}
}
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->subscribers()->all();
/**
* Using the Facade
*/
SendStack::subscribers()->all();
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->subscribers()->get(
query: '1234-1234-1234-1234' // This can be either the subscribers UUID or their Email Address
);
/**
* Using the Facade
*/
SendStack::subscribers()->get(
query: '1234-1234-1234-1234', // This can be either the subscribers UUID or their Email Address
);
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
use SendStack\Laravel\Http\Requests\SubscriberRequest;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->subscribers()->create(
request: new SubscriberRequest(
email: 'contact@getsendstack.com', // Required
firstName: 'Send', // Optional
lastName: 'Stack', // Optional
tags: [
'Client',
'Awesome',
], // Optional
optIn: true, // Optional
),
);
/**
* Using the Facade
*/
SendStack::subscribers()->create(
request: new SubscriberRequest(
email: 'contact@getsendstack.com', // Required
firstName: 'Send', // Optional
lastName: 'Stack', // Optional
tags: [
'Client',
'Awesome',
], // Optional
optIn: true, // Optional
),
);
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
use SendStack\Laravel\Http\Requests\SubscriberRequest;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->subscribers()->update(
uuid: '1234-1234-1234-1234',
request: new SubscriberRequest(
email: 'contact@getsendstack.com', // Required
firstName: 'Send', // Optional
lastName: 'Stack', // Optional
tags: [
'Client',
'Awesome',
], // Optional
optIn: true, // Optional
),
);
/**
* Using the Facade
*/
SendStack::subscribers()->update(
uuid: '1234-1234-1234-1234',
request: new SubscriberRequest(
email: 'contact@getsendstack.com', // Required
firstName: 'Send', // Optional
lastName: 'Stack', // Optional
tags: [
'Client',
'Awesome',
], // Optional
optIn: true, // Optional
),
);
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->subscribers()->delete(
uuid: '1234-1234-1234-1234'
);
/**
* Using the Facade
*/
SendStack::subscribers()->delete(
uuid: '1234-1234-1234-1234',
);
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->subscribers()->attachTag(
uuid: '1234-1234-1234-1234',
tag: 'Early Access',
);
/**
* Using the Facade
*/
SendStack::subscribers()->attachTag(
uuid: '1234-1234-1234-1234',
tag: 'Early Access',
);
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->subscribers()->removeTag(
uuid: '1234-1234-1234-1234',
tag: 'Early Access',
);
/**
* Using the Facade
*/
SendStack::subscribers()->removeTag(
uuid: '1234-1234-1234-1234',
tag: 'Early Access',
);
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->isActiveSubscriber(
email: 'taylor@laravel.com',
);
/**
* Using the Facade
*/
SendStack::isActiveSubscriber(
email: 'taylor@laravel.com',
);
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->tags()->all();
/**
* Using the Facade
*/
SendStack::tags()->all();
use SendStack\Laravel\Contracts\ClientContract;
use SendStack\Laravel\Facades\SendStack;
use SendStack\Laravel\Http\Requests\TagRequest;
/**
* Without a Facade
*/
$client = app()->make(
abstract: ClientContract::class,
);
$client->tags()->create(
request: new TagRequest(
name: 'Test', // Required
allowFormSubscription: true, // Optional
),
);
/**
* Using the Facade
*/
SendStack::tags()->create(
request: new TagRequest(
name: 'Test', // Required
allowFormSubscription: true, // Optional
),
);
composer test
Please see CHANGELOG for more information on what has changed recently.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.