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

Foi útil?

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 o composer.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';
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top