Eu adicionei um módulo de desenvolvimento local (repositório git separado) ao Magento 2 usando links simbólicos e ele estava funcionando bem até que eu atingi os modelos PHTML. Após uma depuração pesada, descobri que a classe de sistema de arquivos Magento 2 ( Magento\Framework\Filesystem\Directory\Read
) usa um isExists()
método combinado com uma getAbsolutePath()
chamada para verificar se o modelo PHTML existe. No entanto, o getAbsolutePath()
método verifica se o caminho relativo existe no sistema de arquivos Magento 2 e, se não, ele anexa a raiz do Magento 2. isto. No meu caso, o módulo vive em um repositório separado /git/A
enquanto o Magento vive /site/B
e esse comportamento verifica a existência de um modelo PHTML no /site/B/git/A
.
Em resumo: os modelos PHTML que vivem fora do sistema de arquivos raiz Magento 2 não são selecionados, independentemente da configuração da configuração do sistema "Permitir links simbólicos" estar ativada. Parece que a configuração está funcionando, mas apenas se a fonte do link simbólico ainda estiver dentro do sistema de arquivos Magento 2.
Alguém mais encontrou isso? Qual seria a melhor maneira de lidar com o desenvolvimento em um repositório Git externo?
Respostas:
Solução alternativa hackeada se você estiver usando o repositório de caminho do compositor para o seu módulo.
Em
registration.php
colocar:Isso registrará seu módulo no caminho com link simbólico no diretório do fornecedor raiz do Magento, em vez de no caminho real.
fonte
/vagrant/app/code/Vendor/
para/var/www/shop/app/code/Vendor
. Isso resolveu para mim!Também deve ser possível manipular o registration.php para apontar para sua raiz de desenvolvimento.
Para ter certeza de que está sendo carregado, você teria que executar o registration.php em algum lugar do processo de inicialização.
A maneira mais fácil (sem instalá-lo via compositor) seria adicioná-lo manualmente ao fornecedor / compositor / autoload_files.php.
Também pensei em escrever um módulo para isso. Este módulo também pode ser útil para ambientes de teste de integração (para adicionar e remover módulos rapidamente, sem precisar copiá-los em algum lugar).
=== ATUALIZAÇÃO ===
até agora eu escrevi o módulo: http://github.com/davidverholen/magento2-dynamic-component-registry
Também acho que deveria ser possível vincular módulos usando links simbólicos relativos
fonte
É possível ativar / permitir links simbólicos através das lojas => Configuração => Avançado => Desenvolvedor => Configurações do modelo (como no Magento 1.x):
(Não testei se essa configuração funciona)
Além disso, você pode usar submódulos, dessa forma você não precisa de links simbólicos.
Para desenvolvimento, desenvolvo módulos em um diretório separado e uso o PHPStorm para copiá-los na minha instalação de desenvolvimento do Magento 2.
fonte
Se você desenvolver usando o PHP Storm, basta copiar o segundo repositório para a raiz do projeto Magento. Em seguida, crie links simbólicos necessários para ativar o módulo. O PHP Storm tratará este projeto como multirrotado e reconhecerá os dois repositórios. Você pode escolher entre estratégias de gerenciamento de repositório síncronas e assíncronas (padrão) .
Esse problema também ocorre quando o EE (ou qualquer outro módulo) é vinculado ao CE usando links simbólicos. A causa raiz é que
registration.php
calcula o caminho do módulo base como o caminho real para o diretório (no seu caso, está fora do projeto Magento). É por isso que o caminho relativo é calculado incorretamente e o caminho absoluto também está incorreto. Se o segundo repositório for colocado na raiz do Magento, o caminho relativo apontará para o caminho real do arquivo (não o link simbólico), mas ele ainda será encontrado, para que tudo funcione.fonte