Pregunta

Estoy intentando ejecutar la demostración de la aplicación Ratchet pero no puedo ejecutar el archivo

Esta es mi estructura de archivos.

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

La carpeta del proveedor existe en esta ubicación

/var/www/src/MyApp/vendor/

Cada vez que ejecuto el archivo del servidor de chat en la terminal aparece el siguiente error

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

Por favor ayúdenme a resolver esto.

Nota: Los detalles completos del código existen en esta página.

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

Se hizo esta pregunta pero aún no hay respuesta para esa pregunta.Clase 'MyChat\Chat' no encontrada en C:\wamp\www\bin\chat-server.php

¿Fue útil?

Solución

La ruta principal para la carga automática es la ubicación del archivo composer.json, por lo que si eso vive en /var/www/src/MyApp/, la carga automática usará eso como base.

En su caso, usted dice que se puede encontrar el espacio de nombres de MyApp en el directorio src (que significa /var/www/src/MyApp/src).Eso no es cierto, ya que el archivo /var/www/src/MyApp/src/MyApp/Chat.php no existe.

Puede resolver este problema en 3 formas diferentes:

  • germinando composer.json : puede mover el archivo composer.json a /var/www, para poder usarlo como base;
  • Actualizando la carga automática (usando PSR-4): también puede usar PSR-4 en lugar de PSR-0 y configurarlo como "autoload": { "psr-4": { "MyApp\\": "" } };
  • Reorganizando sus archivos : también puede cambiar la estructura de archivos a:

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

Otros consejos

Si no tiene el archivo composer.json y la carpeta de proveedores en la raíz, no funcionará.Además, no toque la carpeta de proveedores (y subcarpetas).La estructura de la carpeta debe ser así:

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

Finalmente, después de actualizar el composer.json, asegúrese de ejecutar una actualización:

php composer.phar update

De esta manera funcionará.

Debe mencionar la ruta base de sus clases que deben ser autoOradas:

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

y ejecutar

compositor dump-autoload

Intente cargar automáticamente los archivos primero con:

$ composer update

Si aún no funciona, incluya la línea require 'chat.php';, justo al comienzo del chat-server.php archivo.Funcionó para mí.

Luché con este problema durante horas y encontré que me faltaba algunos paquetes.Pude arreglarlo con este comando:

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

Aquí hay una imagen de lo que vi después de correr: Paquetes instalados

espero que esto ayude!

En mi caso, después de pasar medio día, me di cuenta de que el error fue porque me perdí esta línea:

require 'vendor/autoload.php';

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top