codraw / pusher-bundle
Integrate the Pusher Channels API into Symfony
Requires
- php: >=8.5
- ext-json: *
- pusher/pusher-php-server: ^7.2
- symfony/config: ^7.4.0
- symfony/dependency-injection: ^7.4.0
- symfony/http-foundation: ^7.4.0
- symfony/http-kernel: ^7.4.0
Requires (Dev)
- phpunit/phpunit: ^12.5
- symfony/framework-bundle: ^7.4.0
- symfony/routing: ^7.4.0
- symfony/twig-bundle: ^7.4.0
- twig/twig: ^3.0
Suggests
- symfony/twig-bundle: To expose the Pusher application key to your templates
This package is auto-updated.
Last update: 2026-07-27 17:57:01 UTC
README
This bundle let you use Pusher simply.
Pusher (Documentation) is a simple hosted API for adding realtime bi-directional functionality via WebSockets to web and mobile apps, or any other Internet connected device. It's super powerful, and a ton of fun!
This bundle is under the MIT license.
Installation
Use composer to install this bundle.
composer require codraw/pusher-bundle
If you're not using Symfony Flex, then you will also need to enable
Draw\Bundle\PusherBundle\DrawPusherBundle in your config/bundles.php file.
<?php return [ // ... Draw\Bundle\PusherBundle\DrawPusherBundle::class => ['all' => true], // ... ];
Configuration
If you do not have a Pusher account, sign up and make a note of your API key before continuing.
General
To start, you'll need to setup a bit of configuration.
This is the default configuration in yml:
# app/config/config.yml draw_pusher: # Default configuration scheme: http host: api.pusherapp.com port: 80 cluster: us-east-1 # Change the cluster name timeout: 30 debug: false # true if you want use the debug of all requests
You must set the url parameter :
# app/config/config.yml draw_pusher: url: <scheme>://<key>:<secret>@<host>[:<port>]/apps/<app-id>
It will parse the URL and set, or replace the default value if exists, the various parameters scheme, key, secret, host, port and app_id
Or you can set the various parameters separately:
# app/config/config.yml draw_pusher: app_id: <app-id> key: <key> secret: <secret>
By default, calls will be made over a non-encrypted connection. To change this to make calls over HTTPS, simply:
# app/config/config.yml draw_pusher: # ... scheme: https port: 443
If you want to use private or presence channels, set the parameter auth_service_id
# app/config/config.yml draw_pusher: # ... auth_service_id: <the_auth_service_id>
See the section about "Private and Presense channel auth" below
Usage!
Once you've configured the bundle, you will have access to a pusher service,
which can be autowired by Pusher\Pusher typehint.
From inside a controller, you can use it like this:
use Pusher\Pusher; class SampleController { public function triggerPusherAction(Pusher $pusher) { // ... $data['message'] = 'hello world'; $pusher->trigger('test_channel', 'my_event', $data); // ... } }
This code will autowire \Pusher\Pusher class from the official Pusher SDK. You can find out all about it on
pusher's documentation.
Private and Presence channel authentication (optional)
If you'd like to use private or presence, you need to add an authorization service.
First, create an authorization service that implements Draw\Bundle\PusherBundle\Authenticator\ChannelAuthenticatorInterface:
<?php // src/Pusher/ChannelAuthenticator.php namespace App\Pusher; use Draw\Bundle\PusherBundle\Authenticator\ChannelAuthenticatorInterface; class ChannelAuthenticator implements ChannelAuthenticatorInterface { public function authenticate($socketId, $channelName) { // logic here return true; } }
Next, register it as service like normal:
# config/services.yml services: my_channel_authenticator: AppBundle\Pusher\ChannelAuthenticator
Then include its service id in the draw_pusher auth_service_id configuration
parameter:
# config/packagers/draw.pusher.yml draw_pusher: # ... auth_service_id: 'my_channel_authenticator'
Additionally, enable the route by adding the following to your config\routing.yml
configuration:
# config\routing.yml draw_pusher: resource: "@DrawPusherBundle/Resources/config/routing.xml" prefix: /pusher
In some Symfony configurations, you may need to manually specify the
channel_auth_endpoint: (not required in most setups):
{# app/Resources/views/base.html.twig #} <script type="text/javascript"> Pusher.channel_auth_endpoint = "{{ path('draw_pusher_bundle_auth') }}"; </script>
Credits
This bundle is a fork of laupiFrpar/LopiPusherBundle
at version 6.1.0, re-namespaced under Draw\Bundle\PusherBundle and upgraded for PHP 8.5 /
Symfony 7.4 (the upstream Symfony 7 support request,
issue #75, is still open). The original
MIT license is preserved in LICENSE.