18

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

这是我的文件结构

/var/www/src/MyApp/
/var/www/src/MyApp/chat.php
/var/www/src/MyApp/chat-server.php
<?php
使用 Ratchet\Server\IoServer;
使用 MyApp\Chat;

#require "chat.php";

    需要'供应商/autoload.php';

    $server = IoServer::factory(
        新聊天(),
        8080
    );

    $服务器->运行();
/var/www/src/MyApp/composer.json
{
    “自动加载”:{
        “psr-0”:{
            “我的应用程序”:“src”
        }
    },
    “要求”: {
        “cboden/棘轮”:“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

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

4

7 回答 7

19

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

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

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

php composer.phar update

这样它就会起作用。

于 2014-05-22T18:37:35.080 回答
11

自动加载的主要路径是 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
    
于 2014-04-12T17:29:32.853 回答
10

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

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

并运行

作曲家转储自动加载

于 2017-10-11T10:45:13.540 回答
6

首先尝试自动加载文件:

$ composer update

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

于 2017-04-07T17:05:23.387 回答
3

这是我的工作配置:

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

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

于 2021-01-07T14:55:00.010 回答
1

我为这个问题苦苦挣扎了几个小时,发现我丢失了一些包裹。我可以用这个命令修复它:

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

这是我运行后看到的图片: 已安装的软件包

希望这可以帮助!

于 2018-04-11T16:13:46.840 回答
0

就我而言,花了半天后,我意识到错误是因为我错过了这一行:

require 'vendor/autoload.php';
于 2018-07-28T18:30:44.777 回答