Я пытаюсь запустить демонстрацию приложения 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 \ Chat не находится в C: \ wamp \ www \ bin \ chat-server.php

18
Sundar 11 Апр 2014 в 16:28

7 ответов

Лучший ответ

Основной путь для автозагрузки - это расположение файла composer.json, поэтому, если он находится в /var/www/src/MyApp/, автозагрузка будет использовать его в качестве основы.

В вашем случае вы говорите, что пространство имен MyApp можно найти в каталоге src (что означает /var/www/src/MyApp/src). Это неправда, поскольку файл /var/www/src/MyApp/src/MyApp/Chat.php не существует.

Вы можете решить эту проблему 3 разными способами:

  • Перемещение 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
    
10
Wouter J 12 Апр 2014 в 17:29

Если у вас нет файла composer.json и папки vendor в корневом каталоге, это не сработает. Кроме того, не трогайте папку поставщика (и подпапки). Структура папок должна быть такой:

/composer.json
/composer.phar
/vendor/[misc]
/src/MyApp/Chat.php

Наконец, после обновления composer.json обязательно запустите обновление:

php composer.phar update

Таким образом, это будет работать.

19
dearsina 22 Май 2014 в 18:37

Вы должны указать базовый путь ваших классов, которые необходимо загрузить в автозагрузку:

{
    "autoload": {
        "psr-4": {
            "MyApp\\": "src/MyApp/"
        }
    },
    "require": {
        "cboden/ratchet": "^0.4.0",
        "react/zmq": "0.2.*|0.3.*"
    }
}

И беги

Композитор дамп-автозагрузка

10
Jaskaran Singh 11 Окт 2017 в 10:45

Попробуйте сначала автозагрузить файлы с помощью:

$ composer update

Если по-прежнему не работает, включите строку require 'chat.php'; в самом начале файла chat-server.php. У меня это сработало.

6
Pransh Tiwari 7 Апр 2017 в 17:05

Вот моя рабочая конфигурация:

root
├── bin
│   └── chat-server.php
├── src
│   └── Chat.php
├── composer.json
├── composer.lock
└── vendor
{
    "autoload": {
        "psr-4": {
            "MyApp\\": "src"
        }
    },
    "require": {
        "cboden/ratchet": "^0.4"
    }
}

В руководстве не упоминается, что после добавления / обновления раздела autoload в composer.json вам необходимо запустить composer install для регенерации файлов автозагрузки .

3
Kwadz 7 Янв 2021 в 14:55

Я часами боролся с этой проблемой и обнаружил, что мне не хватает нескольких пакетов. Я смог исправить это с помощью этой команды:

php composer.phar install --no-dev -o

Вот фотография того, что я увидел после бега: установленные пакеты

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

1
Peter Binder 11 Апр 2018 в 16:13

В моем случае, потратив полдня, я понял, что ошибка была из-за того, что я пропустил эту строку:

require 'vendor/autoload.php';
0
Amir Hajiha 28 Июл 2018 в 18:30