Installation
composer require cubicmushroom/mailchimp-bundle
Enable the bundle in config/bundles.php:
return [
// ...
CubicMushroom\MailchimpBundle\CubicMushroomMailchimpBundle::class => ['all' => true],
];
Configuration
Add MailChimp API key and DC (datacenter) to .env:
MAILCHIMP_API_KEY=your_api_key-us1
MAILCHIMP_DC=us1
Publish the default config (optional):
php bin/console config:dump-reference CubicMushroom\MailchimpBundle\Resources\config\services.yaml
First Use Case: Subscribe a User
use CubicMushroom\MailchimpBundle\Service\MailchimpService;
class UserController extends AbstractController
{
public function subscribe(User $user): Response
{
$mailchimp = $this->get('mailchimp.service');
$mailchimp->subscribe($user->email, 'your_list_id');
return $this->json(['status' => 'subscribed']);
}
}
List Management
$lists = $mailchimp->getLists();
$mailchimp->createList('Newsletter', 'newsletter@example.com');
Campaigns
$mailchimp->sendCampaign($campaignId, ['email' => $user->email]);
$mailchimp->scheduleCampaign($campaignId, '2024-12-31T12:00:00');
Segmentation
$mailchimp->addTagToSubscriber($listId, $subscriberHash, 'vip');
$subscribers = $mailchimp->getSubscribersByTag($listId, 'vip');
Webhooks
// In a controller
$payload = $this->getRequest()->getContent();
$mailchimp->handleWebhook($payload);
MailchimpService directly into controllers/services.SubscriberAddedEvent) after API calls.MailchimpService in tests:
$this->mock(MailchimpService::class)
->shouldReceive('subscribe')
->once()
->with($user->email, 'list_id');
API Rate Limits
$cache = $this->container->get('cache.app');
$lists = $cache->get('mailchimp_lists', function() use ($mailchimp) {
return $mailchimp->getLists();
});
Subscriber Hashes
Webhook Verification
$isValid = $mailchimp->verifyWebhook($payload, $this->getRequest()->headers->get('X-Mailchimp-Signature'));
DC-Specific Endpoints
.env MAILCHIMP_DC matches your MailChimp account’s DC.debug: true in config to log API responses.$client = $mailchimp->getClient();
$response = $client->request('GET', '/lists');
Custom API Endpoints Override the service definition to add custom methods:
# config/services.yaml
CubicMushroom\MailchimpBundle\Service\MailchimpService:
arguments:
$client: '@mailchimp.http_client'
$customMethods: ['customMethod' => ['GET', '/custom-endpoint']]
Event Listeners
Extend the bundle by listening to events (e.g., mailchimp.subscriber.added):
// src/EventListener/MailchimpSubscriberListener.php
public function onSubscriberAdded(SubscriberAddedEvent $event)
{
// Log or trigger side effects
}
Custom Response Transformers Override the default response handling:
$mailchimp->setResponseTransformer(function($response) {
return json_decode($response->getBody(), true);
});
How can I help you explore Laravel packages today?