web-dev-qa-db-ja.com

クラス「プッシャー」が見つかりません

プッシャーパッケージをインストールすると、「クラス 'プッシャー'が見つかりません」というエラーが発生しました。

9
user8294451

Claudioの診断は正しく、名前空間Pusherはバージョン3で追加されました。 Laravelファイルを変更することは、推奨されるソリューションではありません。

より良い方法は、config/app.phpにエイリアスを作成することです。 「aliases」キーの下で、これを「サードパーティエイリアス」セクションの配列に追加します。

'Pusher' => Pusher\Pusher::class,
27
Larry Reinhard

Pusherのバージョン3では、Pusher\Pusherの名前空間が変更されていることに気付きました。 composerで設定した場合、.env、BROADCAST_DRIVER = pusherを設定すると、そのエラーが表示されます。ログを確認すると、このファイルのどこに問題があるかがわかります。

'vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastManager.php "

。画像のようにプッシャーの代わりにプッシャー\プッシャーの参照を変更する必要があります: enter image description here

次に、関数PusherBroadCasterを見つけ、Pusher\Pusherの参照プッシャーを変更します。

enter image description here

vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php

2

(OPが質問に次の回答を投稿しました。根本的な問題は、バージョン3の pusher-php-server が名前空間を導入するため、use Pusher\Pusher。)

次のコマンドを作成します。

namespace App\Console\Commands;

use Illuminate\Support\Facades\File;
use Illuminate\Console\Command;

class FixPusher extends Command
{

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'fix:pusher';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Fix Pusher namespace issue';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $broadcastManagerPath = base_path('vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastManager.php');
        $pusherBroadcasterPath = base_path('vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php');

        $contents = str_replace('use Pusher;', 'use Pusher\Pusher;', File::get($broadcastManagerPath));
        File::put($broadcastManagerPath, $contents);

        $contents = str_replace('use Pusher;', 'use Pusher\Pusher;', File::get($pusherBroadcasterPath));
        File::put($pusherBroadcasterPath, $contents);
    }
}

それから加えて "php artisan fix:pusher"からcomposer.jsonファイル:

"post-update-cmd": [
   "php artisan fix:pusher",
   "Illuminate\\Foundation\\ComposerScripts::postUpdate",
   "php artisan optimize"
]
1
jameshfisher

vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.phpそして「Use Pusher」を「Use Pusher/Pusher」に変更します。

0