El problema es bien conocido: las lib
clases se cargan exclusivamente a través del autocargador, y no podemos cambiarlas más que:
- Copiándolos por completo a un codePool que se verifica antes que lib.
- Instalando el cargador automático PSR-0 , especificando un mapa de clase de carga automática, y luego copiando el archivo completamente en esa estructura de carpetas. [mi solución actual]
Estoy en una situación difícil porque quiero tocar potencialmente muchos de estos archivos, pero por el bien de mi cordura y estabilidad / capacidad de actualización de la tienda no quiero copiar clases de biblioteca completas.
Ahora, obviamente, hay posibles soluciones a este problema, pero todas vienen con su propio conjunto de problemas:
- Siga la ruta AOP y use una biblioteca basada en PHP como Go! AOP : la última vez que verifiqué esto requerirá que las clases de Magento sean cargadas por el autocargador del compositor, no solo una disponible. Flyingmana ha realizado un trabajo en esta área, pero definitivamente no está listo para el uso de producción y mis necesidades son más inmediatas. También quiero enviar como una extensión, y eso requeriría más configuración del compositor.
- Vaya a la ruta AOP y use una extensión PHP nativa : probablemente la más favorable en este punto, pero requeriría instalar una extensión separada, sin mencionar que no funcionaría con HHVM.
- Uso de PHP classkit y / o runkit : Es otra extensión nativa de PHP por lo que tiene el mismo problema que el anterior.
- Revise los sitios de llamadas para usar mi propia
\Danslo\Varien_X
versión del espacio de nombres ( ), luego extienda desde el original (\Varien_X
): hay demasiados sitios de llamadas para parchar y requeriría una cantidad tonta de reescrituras. No es una opción. Roll my own: Debería ser posible:
- Escribe mi propio cargador automático.
- Copie la clase original en una carpeta separada (
{root_dir}/var/tmp
), envuélvalanamespace \Magento { < original contents > }
. - Incluye ese archivo.
- Incluir mi clase modificada
OriginalClass extends Magento\OriginalClass {}
La desventaja de esto es obvia: generación dinámica de código, expresiones regulares, un poco de sobrecarga para cargar clases reescritas. Pero estoy casi seguro de que en este punto sería mejor copiar ~ 5000 líneas de código cuando solo quiero tocar / agregar ~ 100 líneas.
Sé que estoy preguntando mucho, pero ¿hay algo moderno y relativamente limpio que ayude a resolver este problema?