作曲家 PHP 致命错误:在 /MyApp/chat-server 中找不到类'MyAppChat'.php



我正在尝试运行Ratchet应用程序演示,但无法执行文件

这是我的文件结构

/var/www/src/MyApp/
/var/www/src/MyApp/chat.php
/var/www/src/MyApp/chat-server.php
<?php使用Ratchet\Server\IoServer;使用MyApp\Chat;#需要"chat.php";要求"vendor/autoload.php";$server=IoServer::工厂(new Chat(),8080);$server->run();
/var/www/src/MyApp/composer.json
{"自动加载":{"psr-0":{"MyApp":"src"}},"要求":{"cboden/Ratchet":"0.3.*"}}

此位置存在供应商文件夹

/var/www/src/MyApp/vendor/

每当我在终端中执行聊天服务器文件时,我都会收到以下错误

PHP Fatal error:  Class 'MyAppChat' not found in /MyApp/chat-server.php

请帮助我解决此问题

注意:完整的代码详细信息存在于此页面中

http://socketo.me/docs/hello-world

这个问题被问了,但仍然没有答案类';MyChat\Chat';在C:\wamp\www\bin\chat-server.php 中找不到

如果根目录下没有composer.json文件和vendor文件夹,它将无法工作。此外,不要触摸供应商文件夹(及其子文件夹)。文件夹结构必须是这样的:

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

最后,在更新composer.json之后,确保运行更新:

php composer.phar update

这样就行了。

自动加载的主要路径是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
    

您必须提到需要自动加载的类的基本路径:

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

并运行

Composer转储自动加载

首先尝试使用自动加载文件

$ composer update

如果仍然不起作用,则在chat-server.php文件的开头包含行require 'chat.php';。它对我有效。

这是我的工作配置:

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

本教程没有提到在composer.json中添加/更新autoload部分后,您需要运行composer install重新生成自动加载文件

我与这个问题争论了几个小时,发现我丢失了几个包。我可以用这个命令修复它:

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

这是我跑步后看到的一张照片:已安装包

希望这能有所帮助!

在我的情况下,花了半天时间后,我意识到错误是因为我错过了这一行:

require 'vendor/autoload.php';

相关内容

  • 没有找到相关文章

最新更新