ccoeder's avatar

lumen redis subscribe giving an error on broadcast event

im using lumen 5.3 and trying to do a real-time feed.But im getting an error about redis.Here is my codes.

composer.json file

    {
    "name": "laravel/lumen",
    "description": "The Laravel Lumen Framework.",
    "keywords": ["framework", "laravel", "lumen"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.5.9",
        "laravel/lumen-framework": "5.2.*",
        "vlucas/phpdotenv": "~2.2",
        "intervention/image": "^2.3",
        "illuminate/mail": "^5.1",
        "bogardo/mailgun": "4.0.*",
        "illuminate/redis" : "5.2.*",
        "predis/predis": "^1.1"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "phpunit/phpunit": "~4.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "classmap": [
            "tests/",
            "database/"
        ]
    }
}

app.php file

<?php

require_once __DIR__.'/../vendor/autoload.php';

try {
  (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
  //
}

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| Here we will load the environment and create the application instance
| that serves as the central piece of this framework. We'll use this
| application as an "IoC" container and router for this framework.
|
*/

$app = new Laravel\Lumen\Application(
realpath(__DIR__.'/../')
);

$app->withFacades();
class_alias('Intervention\Image\Facades\Image','Image');
class_alias('Illuminate\Contracts\Redis\Database', 'Redis');

// $app->withEloquent();

/*
|--------------------------------------------------------------------------
| Register Container Bindings
|--------------------------------------------------------------------------
|
| Now we will register a few bindings in the service container. We will
| register the exception handler and the console kernel. You may add
| your own bindings here if you like or you can make another file.
|
*/

$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);

$app->singleton(
Illuminate\Contracts\Console\Kernel::class,
App\Console\Kernel::class
);

/*
|--------------------------------------------------------------------------
| Register Middleware
|--------------------------------------------------------------------------
|
| Next, we will register the middleware with the application. These can
| be global middleware that run before and after each request into a
| route or middleware that'll be assigned to some specific routes.
|
*/

//$app->middleware([
  //'permission' => App\Http\Middleware\PermissionMiddleware::class,
//]);

$app->routeMiddleware([
  'permission' => App\Http\Middleware\PermissionMiddleware::class,
  //'auth' => App\Http\Middleware\Authenticate::class,
]);

/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Here we will register all of the application's service providers which
| are used to bind services into the container. Service providers are
| totally optional, so you are not required to uncomment this line.
|
*/

$app->register('Intervention\Image\ImageServiceProvider');
$app->register(App\Providers\AppServiceProvider::class);
//$app->register(App\Providers\BroadcastServiceProvider::class);
//$app->register(Illuminate\Redis\RedisServiceProvider::class);


// $app->register(App\Providers\AuthServiceProvider::class);
$app->register(App\Providers\EventServiceProvider::class);

/*
|--------------------------------------------------------------------------
| Load The Application Routes
|--------------------------------------------------------------------------
|
| Next we will include the routes file so that they can all be added to
| the application. This will provide all of the URLs the application
| can respond to, as well as the controllers that may handle them.
|
*/

$app->group(['namespace' => 'App\Http\Controllers'], function ($app) {
  require __DIR__.'/../app/Http/routes.php';
});

return $app;

my event file

<?php

namespace App\Events;

use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class UpdatePostEvent implements ShouldBroadcast
{
  use SerializesModels;

  public $data;

  /**
  * Create a new event instance.
  *
  * @return void
  */
  public function __construct()
  {
    $this->data = array('power'=> '10');
  }

  /**
  * Get the channels the event should be broadcast on.
  *
  * @return array
  */
  public function broadcastOn()
  {
    return ['test-channel'];
  }
}

config/broadcasting.php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Broadcaster
    |--------------------------------------------------------------------------
    |
    | This option controls the default broadcaster that will be used by the
    | framework when an event needs to be broadcast. You may set this to
    | any of the connections defined in the "connections" array below.
    |
    | Supported: "pusher", "redis", "log", "null"
    |
    */

    'default' => env('BROADCAST_DRIVER', 'redis'),

    /*
    |--------------------------------------------------------------------------
    | Broadcast Connections
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the broadcast connections that will be used
    | to broadcast events to other systems or over websockets. Samples of
    | each available type of connection are provided inside this array.
    |
    */

    'connections' => [

      'redis' => [
          'driver' => 'redis',
          'cluster' => env('REDIS_CLUSTER', false),

          'connection' => [

              'host'     => env('REDIS_HOST', '127.0.0.1'),
              'port'     => env('REDIS_PORT', 6379),
              'database' => 0,
          ],

      ],

    ],

];

route.php

$app->get('test', function () {
    event(new App\Events\UpdatePostEvent());
    return "event fired";
});

and the error is :

BindingResolutionException in Container.php line 748: Target [redis] is not instantiable while building [Illuminate\Broadcasting\BroadcastEvent, Illuminate\Broadcasting\BroadcastEvent].

Thanks for the help!

0 likes
0 replies

Please or to participate in this conversation.