Я пытаюсь запустить демонстрацию приложения 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/
Всякий раз, когда я выполняю файл chat-server в терминале, я получил следующую ошибку
PHP Fatal error: Class 'MyApp\Chat' not found in /MyApp/chat-server.php
Пожалуйста, помогите мне, как решить эту проблему.
Примечание. Полная информация о кодах существует на этой странице.
http://socketo.me/docs/hello-world
Этот вопрос был задан, но ответа на этот вопрос еще нет. Класс "MyChat\Chat" не найден в C:\wamp\www\bin\chat-server.php
Ответ 1
Основным путем для автозагрузки является расположение файла composer.json, поэтому, если он живет в /var/www/src/MyApp/
, автозагрузка будет использовать это в качестве базы.
В вашем случае вы говорите, что пространство имен MyApp
можно найти в каталоге src
(что означает /var/www/src/MyApp/src
). Это неверно, поскольку файл /var/www/src/MyApp/src/MyApp/Chat.php
не существует.
Вы можете решить эту проблему тремя способами:
Ответ 2
Если у вас нет файла composer.json и папка поставщика у root, это не сработает. Кроме того, не прикасайтесь к папке поставщика (и подпапкам). Структура папок должна быть такой:
/composer.json
/composer.phar
/vendor/[misc]
/src/MyApp/Chat.php
Наконец, после обновления composer.json обязательно запустите обновление:
php composer.phar update
Таким образом, это сработает.
Ответ 3
Вы должны упомянуть базовый путь ваших классов, который должен быть автоматически загружен:
{
"autoload": {
"psr-4": {
"MyApp\\": "src/MyApp/"
}
},
"require": {
"cboden/ratchet": "^0.4.0",
"react/zmq": "0.2.*|0.3.*"
}
}
И запустите
Автозагрузка композитора
Ответ 4
Сначала попробуйте выполнить автозагрузку файлов:
$ composer update
Если он все еще не работает, require 'chat.php';
строку, require 'chat.php';
, только в начале файла chat-server.php
. Это сработало для меня.
Ответ 5
Я боролся с этой проблемой часами и обнаружил, что мне не хватает нескольких пакетов. Я смог исправить это с помощью этой команды:
php composer.phar install --no-dev -o
Вот изображение того, что я видел после запуска: установленные пакеты
Надеюсь это поможет!
Ответ 6
В моем случае, проведя полдня, я понял, что ошибка была в том, что я пропустил эту строку:
require 'vendor/autoload.php';