Erro fatal do PHP:Classe 'MyApp\Chat' não encontrada em /MyApp/chat-server.php
-
21-12-2019 - |
Pergunta
Estou tentando executar a demonstração do aplicativo Ratchet, mas não consigo executar o arquivo
Esta é a minha estrutura de arquivos
/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.*" } }
A pasta do fornecedor existe neste local
/var/www/src/MyApp/vendor/
Sempre que estou executando o arquivo chat-server no terminal recebo o seguinte erro
PHP Fatal error: Class 'MyApp\Chat' not found in /MyApp/chat-server.php
Por favor me ajude como resolver isso
Observação: Os detalhes completos do código estão nesta página
http://socketo.me/docs/hello-world
Esta pergunta foi feita, mas ainda não há resposta para essa pergunta tambémClasse 'MyChat\Chat' não encontrada em C:\wamp\www\bin\chat-server.php
Solução
O caminho principal para o carregamento automático é o local do arquivo compositor.json, portanto, se ele estiver em /var/www/src/MyApp/
, o carregamento automático usará isso como base.
No seu caso, você diz o MyApp
namespace pode ser encontrado no src
diretório (o que significa /var/www/src/MyApp/src
).Isso não é verdade, já que o arquivo /var/www/src/MyApp/src/MyApp/Chat.php
não existe.
Você pode resolver esse problema de três maneiras diferentes:
- Movendo-se
composer.json
- Você pode mover ocomposer.json
arquivo para/var/www
, para poder usar isso como base; - Atualizando o carregamento automático (usando PSR-4) - Você também pode usar PSR-4 em vez de PSR-0 e configurá-lo como
"autoload": { "psr-4": { "MyApp\\": "" } }
; Reorganizando seus arquivos - Você também pode alterar a estrutura do arquivo para:
/var/www/src/MyApp/ src/MyApp/ Chat.php composer.json
Outras dicas
Se você não tiver o arquivo compositor.json e a pasta do fornecedor na raiz, não funcionará.Além disso, não toque na pasta do fornecedor (e nas subpastas).A estrutura de pastas deve ser assim:
/composer.json
/composer.phar
/vendor/[misc]
/src/MyApp/Chat.php
Finalmente, após atualizar o compositor.json, certifique-se de executar uma atualização:
php composer.phar update
Assim funcionará.
Você deve mencionar o Caminho Base de suas classes que precisam ser carregadas automaticamente:
{
"autoload": {
"psr-4": {
"MyApp\\": "src/MyApp/"
}
},
"require": {
"cboden/ratchet": "^0.4.0",
"react/zmq": "0.2.*|0.3.*"
}
}
E corra
Compositor dump-autoload
Tente carregar automaticamente os arquivos primeiro com:
$ composer update
Se ainda não funcionar, inclua a linha require 'chat.php';
, logo no início do chat-server.php
arquivo.Funcionou para mim.
Lutei com esse problema por horas e descobri que estavam faltando alguns pacotes.Consegui consertar com este comando:
php composer.phar install --no-dev -o
Aqui está uma foto do que vi depois de correr:pacotes instalados
Espero que isto ajude!
No meu caso, depois de passar meio dia, percebi que o erro foi porque perdi esta linha:
require 'vendor/autoload.php';