【问题标题】:PHP Fatal error: Class 'MyApp\Chat' not found in /MyApp/chat-server.phpPHP 致命错误:在 /MyApp/chat-server.php 中找不到类“MyApp\Chat”
【发布时间】:2014-04-11 12:28:20
【问题描述】:

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

这是我的文件结构

/var/www/src/MyApp/
/var/www/src/MyApp/chat.php
/var/www/src/MyApp/chat-server.php
运行();
/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

有人问了这个问题,但也没有答案 Class 'MyChat\Chat' not found in C:\wamp\www\bin\chat-server.php

【问题讨论】:

    标签: php composer-php ratchet


    【解决方案1】:

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

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

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

    php composer.phar update
    

    这样就可以了。

    【讨论】:

    • 教程没有说在更新 json 文件后运行更新命令。非常感谢。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      然后运行

      作曲家转储自动加载

      【讨论】:

      • Composer dump-autoload 对我有用,这些东西总是在变化,现在是棘轮的 0.4.1 版本。
      • 非常感谢!我几乎放弃了,因为我确实完全按照 Ratchet 教程和一些人 youtube 进行操作,但仍然出现此错误。每次更改 composer.json 时都需要运行“Composer dump-autoload”吗?
      【解决方案4】:

      先尝试自动加载文件:

      $ composer update
      

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

      【讨论】:

      • composer update 不会导致任何自动加载。
      【解决方案5】:

      这是我的工作配置:

      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重新生成自动加载文件

      【讨论】:

        【解决方案6】:

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

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

        这是我运行后看到的图片: installed packages

        希望这会有所帮助!

        【讨论】:

          【解决方案7】:

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

          require 'vendor/autoload.php';
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-08-12
            • 1970-01-01
            • 2023-03-22
            • 2020-08-31
            • 2015-03-20
            • 2016-02-14
            • 1970-01-01
            • 2016-05-11
            相关资源
            最近更新 更多