Pregunta

Tengo un proyecto de compositor, llámalo. MyVendor\Database.Ese proyecto utiliza compositor y carga automática.Hay varios archivos en ese proyecto que tienen:

require_once __DIR__."/../vendor/autoload.php";

para utilizar la carga automática.

Todo funciona muy bien, hasta que incluyo MyVendor\Database en otro proyecto.

Tengo otro proyecto, llámalo. MyVendor\CoolPackage eso requiere MyVendor\Database.

Ejecuto la instalación del compositor en CoolPackage y se descarga MyVendor\Database en la carpeta del proveedor.

El problema a partir de aquí, sin embargo, son Mis archivos dentro vendor\MyVendor\Database falla porque llaman require_once __DIR__."/../vendor/autoload.php", pero no hay una carpeta de proveedor dentro de \vendor\MyVendor\Database.

¿Fue útil?

Solución

En tus composer.json usted define el esquema de carga automática.Por razones que usted mismo descubrió ahora, no es una buena idea llamar a la carga automática de Composer dentro de cualquiera de los archivos que se supone que se pueden cargar automáticamente no solo dentro de esa aplicación o módulo, sino también en cualquier otra aplicación.

Básicamente, los archivos de cualquier proyecto de Composer deben dividirse según la definición de carga automática PSR-0 o 4:O SÓLO hacen declaraciones de clases o funciones SIN ningún efecto secundario (como ejecutar código), o ejecutan código sin definir clases o funciones.Sólo los archivos anteriores se pueden cargar automáticamente (a excepción de las funciones, que sólo se podrán declarar siempre cargando el archivo que las contiene con un files sección de carga automática), esta última NO debe cargarse automáticamente.

Y entonces debería resultar relativamente fácil:Todas las clases que se pueden cargar automáticamente también se pueden utilizar cuando este componente se incluye en otra aplicación.Cualquier otra cosa que no sea una clase no se puede utilizar directamente.

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