Ошибка Laravel - класс setEventDispatcher не существует

Укороченная версия

Я получаю эту ошибку, когда запускаю php artisan serve и захожу на свою домашнюю страницу:

ReflectionException (-1)
Class setEventDispatcher does not exist

Подробности

Версия Laravel: 5.6.39 Окружающая среда: местная ОС: macOS Mojave 10.14.2

Это началось, когда у меня возникла ошибка при использовании npm (в другом проекте), поэтому я переустановил Node (Сюда).

После этого этот проект (о котором идет речь) не мог быть запущен. Я получал эту ошибку при запуске php artisan serve:

dyld: Library not loaded: /usr/local/lib/libpng16.16.dylib with anything php related
Referenced from: /usr/local/bin/php
Reason: image not found

Эта ошибка была устранена обновление и обновление пива.

Тогда я смог запустить проект (php artisan serve). Но когда я захожу на домашнюю страницу, была показана эта ошибка:

ReflectionException (-1)
Class setEventDispatcher does not exist

Если я прослежу трассировку стека, то вижу, что именно эта строка (из моего homeController) вызвала ошибку:

if ( ! Auth::check() ){
  return view( 'pages.home' );
}

Если я это закомментировал, то такая же ошибка произошла из другого места, где использовался модуль Auth.

Вот трассировка стека:

Ошибка Laravel - класс setEventDispatcher не существует

Кто-нибудь знает, как это решить? Я не могу найти многообещающих результатов в Google, и я понятия не имею, почему это происходит ...: - /

Дополнение1

Я попробовал composer clear-cache и удалил папку vendor, а затем сделал composer install, и проблема все еще возникла.

Я также проверил своих поставщиков услуг, как предложил Маркус, но я действительно не знаю, что там искать. Все это выглядит довольно регулярно (без каких-либо причудливых операторов if или чего-то еще).

Дополнение2

Я понял, что не могу подключиться к своей базе данных с помощью Sequel Pro. Причина в том, что Брю обновил мою версию MySQL с 5.5 до 8.0.

Это было решено путем выполнения что-то вместе этих строк (я сделал кучу вещей, поэтому мне может не хватать пары шагов):

brew unlink mysql
brew install [email protected]
brew switch mysql 5.7.21
brew link mysql

и я смог затем проверить версию с помощью mysql --version. У меня также были некоторые проблемы с разрешениями с этим изменением версии MySQL, но я испускаю его, так что это не длится слишком долго.

Дополнение3

Я попытался отключить Отладочная панель Laravel (удалив его из composer.json, удалив composer.lock и vendor, а затем запустив composer install). И это исправило !! ... Но!

Когда я позже попытался установить IDE Helper Barryvdh, то та же самая ошибка вернулась !?

Я выполнил эти три шага, чтобы установить IDE Helper (и повторно ввести ошибку):

  1. Выполните эту команду из корня моего каталога: curl https://gist.githubusercontent.com/barryvdh/5227822/raw/4be028a27c4ec782965bb8f2fdcb4c08c71a441d/_ide_helper.php -o _ide_helper.php

  2. Добавьте эти строки в app/Provider/AppServiceProvider.php:

...

if ($this->app->environment() !== 'production') {
  $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
}
  1. Выполните эту команду: composer require --dev barryvdh/laravel-ide-helper

Итак, я вернулся к этой ошибке:

ReflectionException (-1)
Class setEventDispatcher does not exist

... Трассировка стека идентична показанной ранее (получена из Container.php).

Не знаю, поможет ли это вам, но я получал те же ошибки Class setEventDispatcher does not exist после попытки обновления с 5.5 до 5.6, позже я понял, что не выполнил все шаги на странице обновления Laravels: laravel.com/docs/5.6/upgrade после того, как я это сделал, и снова для 5.7 мое приложение снова работало.

Mint 08.01.2019 12:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
6
1
1 981
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Так вот что обычно исправляет для меня

  1. Переустановите зависимости композитора, удалив папку vendor и composer.lock. Затем запустите composer clear-cache, а затем composer install (обычно это проблема)

  2. Убедитесь, что все поставщики услуг правильно импортированы в app.php в конфигурации каталога.

  3. Убедитесь, что ваши поставщики услуг не импортируют то, чего не существует, например, если вы регистрируете поставщика услуг в производственной среде, но устанавливается только как dev:

    if (env('APP_DEBUG')) { $app->register(Barryvdh\Debugbar\LumenServiceProvider::class); }

Я сделал шаг 1 - и это заставило меня понять, что домашняя страница отображается как должна, если пользователь не вошел в систему. Так что это должно быть что-то с Auth-пакетом / модулем. Я просмотрел app.php, но не вижу ничего, что должно быть не так. Однако - у меня не так много опыта работы с поставщиками услуг. Поэтому я прикасаюсь к нему только в том случае, если какой-то гид мне говорит (и я делаю то, что он мне говорит, не задавая вопросов). ... Значит, это не решило мою проблему. Тем не менее, хорошие предложения. :-)

Zeth 28.12.2018 23:43

Рад, что помог! Был бы признателен, если бы вы отметили это как правильный ответ :)

Marcus 29.12.2018 08:26

Не думаю, что вы читали мой комментарий. Я выполнил все три ваших шага, и это не помогло. : - / Я добавил подробности в вопрос.

Zeth 29.12.2018 18:51

Теперь я понял, хорошо!

Marcus 30.12.2018 10:34

Ага. Ничего не меняет. :-(

Zeth 30.12.2018 15:27

У меня есть идея ... Я только что столкнулся с этой проблемой после перенастройки портов виртуального хоста apache, поэтому я снова перезапустил apache / httpd, и проблема исчезла. Может быть, это связано с серверной средой?

Хм ... Я работаю в своей локальной среде. Но, может быть, проблема в этом. Я пытался перезапустить сервер (много раз), и это не имело значения.

Zeth 29.12.2018 18:24

Я столкнулся с той же проблемой в Mac Book Pro. Моя системная конфигурация - PHP 7.3, MySQl, и я использую SQL Pro. Я реализовал все вышеперечисленные методы, но ничего не работает. Проблема все еще остается для меня загадкой, но временно я решил ее, используя команда ремесленника, как показано ниже.

php artisan serve

Разрешите мне запустить проект на http: // локальный: 8000 Надеюсь, это поможет решить эту проблему.

Попробуйте перезапустить PHP. Когда я перезагружаю свой Mac, это происходит. После перезапуска PHP все начинает работать.

sudo brew services restart nginx

Если вы используете камердинера, я решил, что он работает

valet restart и все нормально работает.

ваше здоровье!

Для меня исправление заключалось в обновлении PHP до версии 7.3.3, а затем перезапуске камердинера. Видимо это была ошибка с php 7.3

https://github.com/laravel/framework/issues/27052

Надеюсь это поможет

Ответ принят как подходящий

Пробовал все решения, ни одно из них не помогло.

Наконец, я понял, что при попытке обновить php до 7.3.3 произошел сбой из-за сетевой ошибки. Прочитал журналы, попробовал еще раз, перезапустил камердинера и повторил попытку.

Теперь это работает.

Обновление до 7.3.3 действительно было решением.

Спасибо!

У меня тоже сработало обновление PHP-версии 7.3.0. Заявлено здесь

Zeth 29.09.2019 15:57

Другие вопросы по теме