Фатальная ошибка PHP:Класс 'MyApp\Chat' не найден в /MyApp/chat-server.php

StackOverflow https://stackoverflow.com//questions/23012574

  •  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';
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top