Класс Pusher не найден.

Когда я устанавливаю пакет Pusher, я получаю сообщение об ошибке «Класс« Pusher »не найден».


person Community    schedule 12.07.2017    source источник


Ответы (4)


Диагноз Клаудио верен, пространство имён Pusher было добавлено в версии 3; но изменение файлов Laravel не рекомендуется.

Лучше создать псевдоним в config/app.php. Под ключом aliases добавьте это в массив в разделе «Сторонние псевдонимы»:

'Pusher' => Pusher\Pusher::class,
person Larry Reinhard    schedule 29.07.2017
comment
Это лучший ответ. Недавно я обновил свою установку Laravel с 5.4 до 5.5. Я добавил php "pusher/pusher-php-server": "~3.0" php в свой файл composer.json, а затем добавил псевдоним, и он отлично сработал. - person Humble Hermit; 05.08.2019

В версии 3 Pusher я понял, что пространство имен для Pusher \ Pusher изменилось. Если настроить композитор при установке .env, BROADCAST_DRIVER = pusher, он показывает эту ошибку. Просматривая журнал, вы можете узнать, в чем проблема, в этом файле:

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

. Необходимо изменить ссылки для Pusher \ Pusher вместо Pusher, как на изображении:  введите описание изображения здесь

затем найдите функцию PusherBroadCaster и измените ссылку Pusher на Pusher \ Pusher.

введите описание изображения здесь

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

person Claudio Djohnnatha    schedule 26.07.2017

(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"
]
person Community    schedule 17.07.2017

Просто перейдите к vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php и измените «Использовать толкатель» на «Использовать толкатель / толкатель»;

person Telemarque Ernest    schedule 10.01.2019
comment
Редактировать исходный файл - не лучшая идея. Если вы не можете переопределить функциональность, лучше поискать другой способ сделать что-то. - person PHPer; 10.11.2020