广播服务提供商.php和广播公司.php Laravel 5.4升级后的问题



我有点菜鸟;如果我错过了一些明显的东西,请原谅我。

我的应用程序中有这个类来设置广播频道(用于推送器):

<?php
namespace AppProviders;
use AppModelsThread;
use IlluminateSupportServiceProvider;
use IlluminateSupportFacadesBroadcast;
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 Shift),我开始收到错误:

<!-- language: lang-none -->
SymfonyComponentDebugExceptionFatalThrowableError: Type error: Too few arguments to function AppProvidersBroadcastServiceProvider::AppProviders{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 文件,有一些变化,最可疑的是这一行:

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

现在传递一个额外的参数 $callback。

我认为这与回调函数沿堆栈传递的方式有关,我想知道是否有更好的方法来编写 BroadcastServiceProvider.php它将对更新的 Illuminate 类更友好。

任何帮助非常感谢!

我认为shift错过了一步。请按照此操作解决此问题。

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

在Laravel 5.3中定义通道名称占位符时,使用*字符。在 Laravel 5.4 中,您应该使用 {foo} 样式的占位符定义这些占位符,例如路由:

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

最新更新