Фатальная ошибка PHP:Класс 'MyApp\Chat' не найден в /MyApp/chat-server.php
-
21-12-2019 - |
Вопрос
Я пытаюсь запустить демонстрационную версию приложения Ratchet, но я не могу запустить файл
Это моя файловая структура
/var/www/src/MyApp/
/var/www/src/MyApp/chat.php
/var/www/src/MyApp/chat-server.php
<?php use Ratchet\Server\IoServer; use MyApp\Chat; #require "chat.php"; require 'vendor/autoload.php'; $server = IoServer::factory( new Chat(), 8080 ); $server->run();
/var/www/src/MyApp/composer.json
{ "autoload": { "psr-0": { "MyApp": "src" } }, "require": { "cboden/Ratchet": "0.3.*" } }
Папка поставщика существует в этом расположении
/var/www/src/MyApp/vendor/
Всякий раз, когда я запускаю файл чат-сервера в терминале, я получаю следующую ошибку
PHP Fatal error: Class 'MyApp\Chat' not found in /MyApp/chat-server.php
Пожалуйста, помогите мне, как решить эту проблему
Примечание: Полная информация о коде приведена на этой странице
http://socketo.me/docs/hello-world
Этот вопрос был задан, но ответа на него тоже по-прежнему нет Класс 'MyChat\Чат' не найден в C:\wamp\www\bin\chat-server.php
Решение
Основным путем для автозагрузки является расположение файла composer.json, поэтому, если он находится в /var/www/src/MyApp/
, автозагрузка будет использовать это в качестве основы.
В вашем случае вы говорите, что MyApp
пространство имен можно найти в src
каталог (что означает /var/www/src/MyApp/src
).Это неправда, поскольку файл /var/www/src/MyApp/src/MyApp/Chat.php
не существует.
Вы можете решить эту проблему тремя различными способами:
- Движущийся
composer.json
- Вы можете переместитьcomposer.json
файл для/var/www
, чтобы иметь возможность использовать это в качестве основы; - Обновление автозагрузки (используя PSR-4) - Вы также можете использовать PSR-4 вместо PSR-0 и настроить его как
"autoload": { "psr-4": { "MyApp\\": "" } }
; Реорганизация ваших файлов - Вы также можете изменить структуру файла на:
/var/www/src/MyApp/ src/MyApp/ Chat.php composer.json
Другие советы
Если у вас нет файла composer.json и папка поставщика в root, она не будет работать.Кроме того, не прикасайтесь к папке поставщика (и подпапки).Структура папки должна быть такой:
/composer.json
/composer.phar
/vendor/[misc]
/src/MyApp/Chat.php
.
Наконец, после обновления Composer.json Обязательно запустите обновление:
php composer.phar update
.
Таким образом, он будет работать.
Вы должны упомянуть базовый путь ваших классов, которые должны быть автозагрузкой:
{
"autoload": {
"psr-4": {
"MyApp\\": "src/MyApp/"
}
},
"require": {
"cboden/ratchet": "^0.4.0",
"react/zmq": "0.2.*|0.3.*"
}
}
.
и запустить
Композитор Dump-Autoload
Попробуйте сначала автозагрузка файлов с:
$ composer update
.
Если он до сих пор не работает, включите линию require 'chat.php';
, только в начале файла chat-server.php
.Это сработало для меня.
Я боролся с этим вопросом в течение нескольких часов и обнаружил, что мне не хватало нескольких пакетов.Я смог исправить это с этой командой:
php composer.phar install --no-dev -o
.
Вот картина того, что я видел после бега: Установленные пакеты
Надеюсь, это поможет!
В моем случае, проведении полдня, я понял, что ошибка была, потому что я пропустил эту строку:
require 'vendor/autoload.php';
.