O problema é bem conhecido: as lib
classes são carregadas exclusivamente através do carregador automático e não podemos alterá-las além de:
- Copiando-os inteiramente para um codePool verificado antes da lib.
- Instalando o carregador automático PSR-0 , especificando um mapa de classe de carregamento automático e, em seguida, copiando o arquivo inteiramente na estrutura de pastas. [minha solução atual]
Estou em uma situação difícil, porque quero potencialmente tocar em muitos desses arquivos - mas, por uma questão de sanidade e estabilidade / capacidade de atualização da loja, não quero copiar classes inteiras da biblioteca.
Agora, obviamente, existem soluções em potencial para esse problema, mas todos eles vêm com seu próprio conjunto de problemas:
- Siga a rota da AOP e use uma biblioteca baseada em PHP como o Go! AOP : Por último, verifiquei que isso exigirá que as classes Magento sejam carregadas pelo carregador automático do compositor, e não apenas uma disponível. A Flyingmana fez algum trabalho nesta área, mas definitivamente não está pronta para uso em produção e minhas necessidades são mais imediatas. Também quero enviar como uma extensão, o que exigiria mais configurações do compositor.
- Siga a rota AOP e use uma extensão PHP nativa : provavelmente a mais favorável nesse momento, mas seria necessário instalar uma extensão separada, sem mencionar que não funcionaria com o HHVM.
- Use o classkit e / ou runkit do PHP: é outra extensão nativa do PHP e, portanto, apresenta o mesmo problema acima.
- Faça o patch de sites de chamada para usar minha própria
\Danslo\Varien_X
versão com namespaced ( ) e depois estenda a partir do original (\Varien_X
): existem muitos callites para corrigir e isso exigiria uma quantidade tola de reescritas. Não é uma opção. Role o meu: deve ser possível:
- Escreva meu próprio carregador automático.
- Copie a classe original para uma pasta separada (
{root_dir}/var/tmp
), envolva-anamespace \Magento { < original contents > }
. - Inclua esse arquivo.
- Incluir minha classe modificada
OriginalClass extends Magento\OriginalClass {}
A desvantagem disso é óbvia: geração dinâmica de código, regex, um pouco de sobrecarga para carregar classes reescritas. Mas tenho quase certeza de que, neste momento, seria melhor copiar ~ 5000 linhas de código quando eu apenas quiser tocar / adicionar ~ 100 linhas.
Sei que estou pedindo muito, mas há algo moderno e relativamente limpo por aí que ajude a resolver esse problema?