Instalé Composer y Laravel e instalé algunos paquetes.
todo funciona bien, pero ahora creé mi propia clase en la carpeta services
Le di espacio de nombre de Servicios así:
Servicios de espacio de nombres;
Y el nombre de la clase es UploadToImgurService
Ejecuto el comando composer:
composer dump-autoloadY en mi controlador escribí:
use Services\UploadToImgurService;Pero me sale este error:
Class 'Services\UploadToImgurService' not found¿Qué hice mal? ¿Hay algo más que deba hacer con composer para cargar automáticamente la clase de servicio?
EDITAR Encontré una solución
Edité el archivo composer.json y agregué a psr-4 la línea
"Services\\" : "app/services"¿Pero por qué no funcionó antes? La línea :
"App\\": "app/",¿estaba allí, tal vez cargó la clase pero bajo el espacio de nombres de la aplicación?
Si está utilizando un sistema de archivos que distingue entre mayúsculas y minúsculas, necesitará tener la carpeta Services con S mayúscula.
Tu idea es correcta, pero déjame intentar explicarte cómo funciona la carga automática del psr-4.
Puede definir espacios de nombres raíz en su archivo composer.json y asignarlo a cualquier directorio de proyecto. Dentro de los directorios definidos, sus clases deben obtener el espacio de nombres raíz. Los segmentos del espacio de nombres después de la raíz son creados por su estructura de subdirectorio y el nombre de la clase es igual al nombre del archivo (PSR-4 Autoloading ).
Por ejemplo "MyNamespace\\WithSubNamespace\\": "cool/project"
cool/project/MyClass.php -> MyNamespace\WithSubNamespace\MyClass
cool/project/SubDirectory/AnotherClass.php -> MyNamespace\WithSubNamespace\SubDirectory\AnotherClass
En Laravel, el directorio de la aplicación está asignado al espacio de nombres de la aplicación de forma predeterminada. Opcionalmente, puede cambiar el espacio de nombres raíz con el comando php artisan app:name [NewRootNamespaceName] , pero el cargador automático solo encuentra clases dentro del directorio de la aplicación. Si crea un nuevo directorio fuera de "aplicación", debe agregar el directorio a su asignación de espacio de nombres psr-4 en el archivo composer.json.
En su ejemplo, define un nuevo espacio de nombres raíz en el directorio de la aplicación existente, por lo que su problema era que el espacio de nombres raíz era desconocido y lo resolvió agregando la línea en su composer.json. Esto es posible porque psr-4 proporciona una gran flexibilidad. Pero personalmente, no recomendaría usar diferentes espacios de nombres raíz en el mismo proyecto.
Espero poder ayudar y tal vez esto también sea interesante para ti: composer.json PSR-4 .
tal vez olvidaste agregar esta línea de código
require_once('vendor/autoload.php');