Integrando o carregador automático do compositor no Magento

19

Portanto, o compositor é incrível, e há muito código no repositório de pacotes do compositor que facilita a escrita de extensões Magento.

O problema que estou enfrentando é a melhor forma de configurar (corretamente) o carregamento automático.

Por padrão, os pacotes do compositor são instalados em / vendor e, dentro desse diretório, existe um arquivo autoload.php que configura o carregamento de classe para os pacotes gerenciados do compositor.

Então, qual seria a melhor maneira de exigir o arquivo '/vendor/autoload.php' do compositor? Isso precisaria funcionar para os scripts da loja virtual e do shell. Existe um evento de observador no qual eu possa tocar para fazer o require_once?

Felicidades!

Aaron Bonner
fonte
Nenhuma pista se o github.com/magento-hackathon/magento-composer-installer é de alguma ajuda aqui. Eu acho que é bastante independente. Eu acho que você tentar instalar pacotes não-Magento com o compositor e quer tê-los em lib basicamente /
Alex
Sim, você pode configurar o compositor para instalar na lib, se quiser, mas eu quero manter as libs / mage libs do compositor separadas, se possível. Também no compositor, você pode ter coisas interessantes, como o carregamento automático mapeado por classe, que não se encaixa no mecanismo do carregador automático Mage.
Aaron Bonner
1
+1. Parece que um dos envios de eventos anteriores do Mage.php deve fazer o truque ...?
kalenjordan
Eu sei que isso foi respondido há muito tempo, mas outra opção é incluir o carregador automático do fornecedor no seu arquivo index.php (antes require_once $mageFilenameé chamado). Isso funciona bem para instalações do cliente e não requer a reescrita de arquivos.
Joseph na SwiftOtter
Bem, você está hackeando um arquivo principal, index.php. Quando você atualiza, é necessário lembrar que você adicionou essa linha de código ao index.php.
Aaron Bonner

Respostas:

15

O carregador automático Magento está registrado Mage.php.

Se quiser fazer isso em um módulo próprio, você deve pegar o primeiro evento possível e solicitar o carregador automático lá

De acordo com a análise de Alan, isso seria resource_get_tablename- mas você deve garantir que você lide com esse evento apenas uma vez.

A solução rápida e suja seria corrigir Mage.php(o início do arquivo) - mas isso está invadindo o núcleo.

Também temos o módulo Magento-PSR-0-Autoloader , que oferece uma maneira de adicionar compositores de carregamento automático via config. É uma implementação básica que faz uso do resource_get_tablenameevento.

Alex
fonte
Obrigado Alex, isso é perfeito. Eu havia corrigido o mage.php, mas não queria colocar isso em produção. observar resource_get_tablename funcionou bem!
Aaron Bonner
4
Vinai também teve uma ótima sugestão para colocar Varien_Autoload no pool de códigos local e colocar o código necessário lá, evitando eventos dispendiosos de observação e corrigindo diretamente o código principal.
Aaron Bonner
1
"Implementação simples do exemplo acima: github.com/thijssnowcountry/magento1_composer_loader " - @ user2594875
Fabian Schmengler