2017-11-07 10 views
1

私はちょっとした騒ぎです。私が何かを明らかにしていない場合、私を許してください。Laravel 5.4アップグレード後のBroadcastServiceProvider.phpおよびbroadcaster.phpの問題

私は(プッシャー用)放送チャンネルを設定するために私のアプリでこのクラスを持っている:

<?php 

namespace App\Providers; 

use App\Models\Thread; 
use Illuminate\Support\ServiceProvider; 
use Illuminate\Support\Facades\Broadcast; 

class BroadcastServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     Broadcast::routes(['middleware' => ['api', 'jwt.auth']]); 

     /* 
     * Authenticate the user's personal channel... 
     */ 
     Broadcast::channel('users.*.threads', function ($user, $userId) { 
      return $user->obfuscated_id == $userId; 
     }); 

     Broadcast::channel('threads.*', function ($user, $threadId) { 
      return $user->can('participate', Thread::findByObfuscation($threadId)); 
     }); 

     Broadcast::channel('notifications.*', function ($user, $notifiableId) { 
      return $user->obfuscated_id == $notifiableId; 
     }); 

     Broadcast::channel('messages.*', function ($user, $userId) { 
      return $user->obfuscated_id == $userId; 
     }); 
    } 
} 

これはLaravel 5.3上で正常に動作しましたが、5.4(Laravelシフトを使用して)アップグレード後、私が始めましたエラー取得:

$parameters = $this->extractAuthParameters($pattern, $channel, $callback); 
01:

<!-- language: lang-none --> 
Symfony\Component\Debug\Exception\FatalThrowableError: Type error: Too few arguments to function App\Providers\BroadcastServiceProvider::App\Providers\{closure}(), 1 passed in /home/vagrant/Development/Peeps/api/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php on line 68 and exactly 2 expected in /home/vagrant/Development/Peeps/api/app/Providers/BroadcastServiceProvider.php:35 

がBroadcaster.phpファイルの以前のバージョンと新しいバージョンを比較し、いくつかの変更は、この行は、ほとんどの疑いがあります

これは余分なパラメータ$ callbackを渡します。

私は、スタックに沿ってコールバック関数が渡される方法と関係があり、BroadcastServiceProvider.phpを書くより良い方法があれば、更新されたIlluminateクラスにもっと親しみが持てるだろうと思っています。

大変助かりました!

答えて

0

私はシフトが一歩足りなかったと思います。 Plzはこれを解決するためにこれに従います。 Laravel 5.3のチャンネル名のプレースホルダを定義する場合、*文字が使用されている

https://laravel.com/docs/5.4/upgrade

。 Laravel 5.4では、ルートのような{foo}形式のプレースホルダを使用してこれらのプレースホルダを定義する必要があります。

Broadcast :: channel( 'App.User. {userId}'、function($ user、$ userId){ return int)$ user-> id ===(int)$ userId; });

関連する問題