Il problema è ben noto: le lib
classi vengono caricate esclusivamente tramite il caricatore automatico e non possiamo cambiarle se non:
- Copiandoli interamente in un codePool che è controllato prima di lib.
- Installazione del PSR-0 caricatore automatico , specificando una classmap autoload, e poi copiare il file del tutto in quella struttura delle cartelle, invece. [la mia soluzione attuale]
Sono in una situazione difficile perché voglio potenzialmente toccare molti di questi file, ma per motivi di sanità mentale e stabilità / aggiornabilità del negozio non voglio copiare intere classi di biblioteche.
Ora, ovviamente, ci sono potenziali soluzioni a questo problema, ma tutte presentano un proprio insieme di problemi:
- Vai alla AOP percorso e utilizzare una libreria PHP-based come Go! AOP : L'ultima volta che ho controllato questo richiederà che le classi Magento vengano caricate dal caricatore automatico del compositore, non solo una disponibile. Flyingmana ha svolto alcuni lavori in questo settore, ma sicuramente non è pronto per l'uso in produzione e le mie esigenze sono più immediate. Voglio anche spedire come estensione e ciò richiederebbe una maggiore configurazione del compositore.
- Segui la strada AOP e usa un'estensione PHP nativa : probabilmente la più favorevole a questo punto, ma richiederebbe l'installazione di un'estensione separata, per non parlare del fatto che non funzionerebbe con HHVM.
- Usa il classkit e / o il runkit di PHP: è un'altra estensione nativa di PHP, quindi ha lo stesso problema di cui sopra.
- Patch chiama i siti per usare la mia
\Danslo\Varien_X
versione namespace ( ), quindi estendi dall'originale (\Varien_X
): ci sono troppi callites da patchare e richiederebbe una quantità stupida di riscritture. Non è un'opzione. Fai il mio: Dovrebbe essere possibile:
- Scrivi il mio autoloader.
- Copia la classe originale in una cartella separata (
{root_dir}/var/tmp
), avvolgilanamespace \Magento { < original contents > }
. - Includi quel file.
- Includi la mia classe modificata
OriginalClass extends Magento\OriginalClass {}
L'aspetto negativo di questo è ovvio: generazione di codice dinamico, regex, un po 'di sovraccarico per il caricamento di classi riscritte. Ma sono quasi sicuro che a questo punto batterebbe copiando ~ 5000 righe di codice quando voglio solo toccare / aggiungere ~ 100 righe.
So che sto chiedendo molto, ma c'è qualcosa di moderno e relativamente pulito là fuori che aiuta a risolvere questo problema?