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

一个人想着一个人 提交于 2019-12-18 12:16:29

问题


I am trying to run the Ratchet application demo but I can't execute the file

This is my file structure

/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.*"
    }
}

Vendor Folder is exist in this location

/var/www/src/MyApp/vendor/

Whenever I am executing the chat-server file in terminal I got the following error

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

Please help me how to resolve this

Note: The complete code details are exist in this page

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

This question was asked but still no answer for that question too Class 'MyChat\Chat' not found in C:\wamp\www\bin\chat-server.php


回答1:


The main path for the autoloading is the location of the composer.json file, so if that lives in /var/www/src/MyApp/, the autoloading will use that as a base.

In your case, you say the MyApp namespace can be found in the src directory (which means /var/www/src/MyApp/src). That's not true, since the file /var/www/src/MyApp/src/MyApp/Chat.php does not exists.

You can solve this issue in 3 different ways:

  • Moving composer.json - You can move the composer.json file to /var/www, to be able to use that as base;
  • Updating autoloading (using PSR-4) - You can also use PSR-4 instead of PSR-0 and configure it as "autoload": { "psr-4": { "MyApp\\": "" } };
  • Reorganizing your files - You can also change the file structure to:

    /var/www/src/MyApp/
        src/MyApp/
                Chat.php
        composer.json
    



回答2:


If you don't have the composer.json file and the vendor folder at root, it won't work. Also, don't touch the vendor folder (and subfolders). The folder structure must be like this:

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

Finally, after updating the composer.json, make sure to run an update:

php composer.phar update

This way it will work.




回答3:


You have to mention Base Path of your classes that need to be autoloaded:

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

And run

Composer dump-autoload




回答4:


Try autoloading the files first with:

$ composer update

If it still doesn't work then include the line require 'chat.php';, just at the beginning of the chat-server.php file. It worked for me.




回答5:


I wrestled with this issue for hours and found that I was missing a few packages. I was able to fix it with this command:

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

Here's a picture of what I saw after running: installed packages

Hope this helps!




回答6:


In my case, after spending half a day, I realised the error was because I missed this line:

require 'vendor/autoload.php';


来源:https://stackoverflow.com/questions/23012574/php-fatal-error-class-myapp-chat-not-found-in-myapp-chat-server-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!