Error grave de PHP:Clase 'MyApp\Chat' no encontrada en /MyApp/chat-server.php
-
21-12-2019 - |
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
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 archivocomposer.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';