Magento 2 contiene una serie de archivos de clase que se generan previamente o se generan sobre la marcha. Viven en
var/generated
Estos archivos generados incluyen clases de fábrica. De la documentación , entiendo que un programador usa clases de fábrica para crear instancias de objetos "no inyectables". Un objeto "no inyectable" es un objeto que no se puede agregar mediante __constructor
inyección de dependencia, generalmente porque requiere la entrada del usuario para crear una instancia.
Lo que no está claro en la documentación es cómo Magento 2 sabe que necesita generar una clase de fábrica. Esta parte
Si el administrador de objetos encuentra una fábrica inexistente en modo de ejecución o compilador, el administrador de objetos genera la fábrica.
suena como si uso una clase de fábrica en el administrador de objetos (o, por extensión, en la inyección de dependencia __constructores), que Magento 2 lo generará para mí. Pero, ¿cómo sabe el administrador de objetos que lo que solicito es una fábrica?
Además, parece haber dos comandos para generar automáticamente (o "compilar") todas las clases generadas. La ejecución de cualquiera de estos comandos genera una gran cantidad de clases Factory. ¿Qué archivos de configuración y / o código están buscando estos comandos para generar los objetos de fábrica necesarios?
Sé que rastrear el administrador de objetos y / o el código de comando hasta el final revelaría esto, pero espero evitar ese largo y arduo viaje.
fuente
Estoy cavando en esta misma sopa de guisantes en este momento. Hasta ahora, entiendo que todo lo que se genera automáticamente
/var/generation
se realiza a partir de las preferencias y las interfaces declaradas enapp/etc/di.xml
.Las interfaces y preferencias suyas se declararán en el
di.xml
archivo en su/app/code/Vendor/<module>/etc/di.xml
.Sabe generar el (los) objeto (s) por usted porque ha declarado una interfaz en su
__constructor
AND y ha declarado una preferencia por esa interfaz global o localmente en eldi.xml
archivo apropiado .Ofrezco tres granos de sal con mis comentarios.
fuente
di.xml
archivos, puede enviar algo al administrador de objetos que termina en Factory y generará un archivo para usted.