web-dev-qa-db-ja.com

PHP致命的なエラー:クラス 'MyApp \ Chat'が/MyApp/chat-server.phpに見つかりません

ラチェットアプリケーションのデモを実行しようとしていますが、ファイルを実行できません

これは私のファイル構造です

/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\Chat'がC:\ wamp\www\bin\chat-server.phpに見つかりません

17
Sundar

自動読み込みのメインパスは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-0の代わりにPSR-4を使用して、"autoload": { "psr-4": { "MyApp\\": "" } }として構成することもできます。
  • ファイルの再編成-ファイル構造を次のように変更することもできます。

    /var/www/src/MyApp/
        src/MyApp/
                Chat.php
        composer.json
    
10
Wouter J

ルートにcomposer.jsonファイルとベンダーフォルダーがない場合、それは機能しません。また、ベンダーフォルダー(およびサブフォルダー)には触れないでください。フォルダ構造は次のようにする必要があります。

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

最後に、composer.jsonを更新した後、必ず更新を実行してください。

php composer.phar update

このように動作します。

19
dearsina

オートロードする必要があるクラスのベースパスについて言及する必要があります。

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

そして実行します

Composerダンプ-自動ロード

9
Jaskaran Singh

最初に次のコマンドでファイルを自動ロードしてみてください。

$ composer update

それでも機能しない場合は、require 'chat.php';ファイルの先頭にchat-server.php行を含めます。それは私のために働いた。

6
Pransh Tiwari

私はこの問題に何時間も取り組み、いくつかのパッケージが不足していることに気づきました。私はこのコマンドでそれを修正することができました:

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

これは私が実行した後に見たものの写真です: インストールされたパッケージ

お役に立てれば!

1
Peter Binder

私の場合、半日を費やした後、エラーは次の行を見逃したことが原因であることに気付きました。

require 'vendor/autoload.php';
0
Amir No-Family