Laravel package to provide Server Sent Events functionality for your app. You can use this package to show instant notifications to your users without them having to refresh their pages.
- PHP >= 7
- Laravel 5
Via Composer
$ composer require sarfraznawaz2005/laravel-sse
For Laravel < 5.5:
Add Service Provider to config/app.php
in providers
section
Sarfraznawaz2005\SSE\ServiceProvider::class,
Add Facade to config/app.php
in aliases
section
'SSE' => Sarfraznawaz2005\SSE\Facades\SSEFacade::class,
Publish package's config, migration and view files by running below command:
$ php artisan vendor:publish --provider="Sarfraznawaz2005\SSE\ServiceProvider"
Run php artisan migrate
to create sselogs
table.
Setup config options in config/sse.php
file and then add this in your view/layout file:
@include('sse::view')
Syntax:
/**
* @param string $message : notification message
* @param string $type : alert, success, error, warning, info
* @param string $event : Type of event such as "EmailSent", "UserLoggedIn", etc
*/
SSEFacade::notify($message, $type = 'info', $event = 'message')
To show popup notifications on the screen, in your controllers/event classes, you can do:
use Sarfraznawaz2005\SSE\Facades\SSEFacade;
public function myMethod()
{
SSEFacade::notify('hello world....');
// or via helper
sse_notify('hi there');
}
By default, package uses noty for showing notifications. You can customize this by modifying code in resources/views/vendor/sse/view.blade.php
file.
By default, pacakge uses message
event type for streaming response:
SSEFacade::notify($message, $type = 'info', $event = 'message')
Notice $event = 'message'
. You can customize this, let's say you want to use UserLoggedIn
as SSE event type:
use Sarfraznawaz2005\SSE\Facades\SSEFacade;
public function myMethod()
{
SSEFacade::notify('hello world....', 'info', 'UserLoggedIn');
// or via helper
sse_notify('hi there', 'info', 'UserLoggedIn');
}
Then you need to handle this in your view yourself like this:
<script>
var es = new EventSource("{{route('__sse_stream__')}}");
es.addEventListener("UserLoggedIn", function (e) {
var data = JSON.parse(e.data);
alert(data.message);
}, false);
</script>
Please see the license file for more information.