Como obter a versão Magento no Magento2? (Equivalente a Mage :: getVersion ())


23

Como obtenho a versão Magento no Magento2.x (por exemplo 2.0.0)?

No Magento1.x, eu poderia fazê-lo com

Mage::getVersion()

Então, qual é o equivalente no Magento2.x?

Respostas:


20

Até Magento versão 2.0.7, o número da versão era mantido na AppInterface::VERSIONconstante.

Com o lançamento do Magento 2.1, a constante foi removida.

Até a versão 2.0.7, se você verificar o arquivo de rodapé adminhtml em que a versão é mostrada

Rodapé do painel do administrador

Tinha referência à \Magento\Framework\AppInterface::VERSIONconstante.

Mas desde que o Magento 2.1 libera, o arquivo de rodapé agora usa o \Magento\Backend\Block\Page\Footer::getMagentoVersion()que, por sua vez, chama o \Magento\Framework\App\ProductMetadata::getVersion().

Anteriormente, o ProductMetadata::getVersion()usado para retornar o valor da constante \Magento\Framework\AppInterface::VERSION, mas agora analisa o composer.json, bem como composer.locke retorna a versão Magento apropriada

Portanto, não importa qual versão você esteja no 2.0.x ou 2.1.x, se você usar o \Magento\Framework\App\ProductMetadata::getVersion()método, sempre obterá a versão apropriada do Magento.

Conclusão:

Magento 1:

Mage::getVersion() //will return the magento version

Magento 2:

//Updated to use object manager
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productMetadata = $objectManager->get('Magento\Framework\App\ProductMetadataInterface');
$version = $productMetadata->getVersion(); //will return the magento version

composer.jsonpode conter uma restrição de versão como "^ 2.1" que não indica a versão exata, então o Magento (também) está verificando o composer.lockarquivo para ver qual versão exata está atualmente instalada.
7ochem

@ 7ochem obrigado pela informação, atualizou a resposta também :)
Atish Goswami

21

Você pode usar isso nas versões 2.0.x:

echo \Magento\Framework\AppInterface::VERSION;

Para a versão 2.1:

Maneira 1, usando DI:

public function __construct(
        \Magento\Framework\App\ProductMetadataInterface $productMetadata
) {
    $this->productMetadata = $productMetadata;
}

public function getMagentoVersion()
{
    return $this->productMetadata->getVersion();
}

Caminho 2, usando o ObjectManager diretamente:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productMetadata = $objectManager->get('Magento\Framework\App\ProductMetadataInterface');
echo $productMetadata->getVersion();

Essa execução você pode encontrar em app / code / Magento / backend / view / adminhtml / templates / page / footer.phtml
Valery Statichnyi

1
OBSERVAÇÃO: isso não funciona mais para o Magento 2.1+ (veja outras respostas!) #
30557 Manuel M

outra resposta realmente funciona? No meu caso, através do relatório de erros. Veja minha nova resposta.
Sohel Rana


10

As soluções mencionadas não são aplicáveis ​​a partir do Magento 2.1 (a \Magento\Framework\AppInterface::VERSIONconstante foi removida)

A nova maneira de obter a versão é recuperá-la da Instância de metadados do produto (lê a versão do compositer.json):

$productMetadata = new \Magento\Framework\App\ProductMetadata();
$version = $productMetadata->getVersion();

(melhor injetar metadados do produto no construtor como \Magento\Framework\App\ProductMetadataInterface)


10

Além das outras respostas, você pode obter a versão principal (por exemplo 2.1) acessando /magento_versionno site Magento 2.


Obrigado por apontar isso. Parece um vazamento de segurança para mim: essa é uma ótima maneira de os hackers encontrarem sites vulneráveis ​​do Magento 2! Obviamente, você só consegue obter a versão principal e secundária dessa maneira, mas ainda parece uma má ideia.
precisa saber é o seguinte

ótimo truque "rápido e sujo", obrigado!
maoizm 11/09/18

6

Caso alguém precise encontrá-lo manualmente. A versão básica do módulo Magento está localizada neste arquivo do compositor:

vendor/magento/magento2-base/composer.json

Também como sugerido acima, para fazer o código abaixo funcionar:

$productMetadata = new \Magento\Framework\App\ProductMetadata();
$version = $productMetadata->getVersion();

\Magento\Framework\App\ProductMetadata agora requer instância de ComposerJsonFinder seja passada no momento da instanciação.

Um exemplo que encontrei em dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php:

$directories = [
    DirectoryList::CONFIG => [DirectoryList::PATH => __DIR__ . '/_files/'],
    DirectoryList::ROOT => [DirectoryList::PATH => __DIR__ . '/_files/' . $composerDir],
    DirectoryList::COMPOSER_HOME => [DirectoryList::PATH => __DIR__ . '/_files/' . $composerDir],
];

$this->directoryList = $this->objectManager->create(
    'Magento\Framework\App\Filesystem\DirectoryList',
    ['root' => __DIR__ . '/_files/' . $composerDir, 'config' => $directories]
);

$this->composerJsonFinder = new ComposerJsonFinder($this->directoryList);

O código acima é apenas para fins informativos. Você tem que cavar mais para fazê-lo funcionar.


6

Você pode executar o comando abaixo para obter a versão magento:

php bin/magento --version

parece que este não diferencia Comunidade vs. edições Enterprise do Magento
maoizm

4

Para usuários do tipo unix

Não é necessário escrever nenhum código PHP para isso. Como o Magento 2 utiliza o compositor, tudo fica mais fácil. Você pode fazer isso de duas maneiras:

Verifique o compositer.json e procure uma chave chamada version. Se você é como eu e gosta de usar o terminal, pode fazer algo como na raiz do projeto.

composer licenses | grep Version:

Isso retorna a versão do M2, se você deseja verificar se é uma versão comunitária ou corporativa, basta fazer o seguinte:

composer licenses | grep Name:

1

basta verificar o arquivo composer.json na raiz do magento2, você encontrará um texto como este

"version": "2.1.2",

composer.jsonpode conter uma restrição de versão como "^ 2.1" que não indica a versão exata. Você deve verificar o composer.lockarquivo para ver qual versão exata está atualmente instalada.
7ochem

1

Tente o seguinte:

<?php echo __('Magento'); ?>
<?php  echo __('ver. %1', \Magento\Framework\AppInterface::VERSION) ?>

Para a versão 2.1:

<?php
$productMetadata = new \Magento\Framework\App\ProductMetadata();
$version = $productMetadata->getVersion();
?>
<?php  echo __('ver. %1', $version) ?>


1

Aqui estão algumas maneiras de verificar a versão do Magento

Método # 1: Use a verificação de código PHP

Verifique a versão Magento 1
Mage::getVersion() //will return the magento version
Verifique a versão Magento 2

Você pode usar isso nas versões 2.0.x:

echo \Magento\Framework\AppInterface::VERSION;

Para a versão 2.1:

A primeira maneira, usando DI:

public function __construct( \Magento\Framework\App\ProductMetadataInterface $productMetadata ) { 
    $this->productMetadata = $productMetadata; 
} 
public function getMagentoVersion() { 
    return $this->productMetadata->getVersion(); 
}

A segunda maneira, usando o ObjectManager diretamente:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$productMetadata = $objectManager->get('Magento\Framework\App\ProductMetadataInterface'); 
echo $productMetadata->getVersion();

Método # 2: Verifique a versão do Magento via linha de comando

Você pode executar o comando abaixo para obter a versão Magento 2:

php bin/magento --version

Na verdade, como o Magento 2 utilizou seu compositor, você não precisa escrever nenhum código PHP para isso. Em vez disso, existem duas opções para encontrar a versão Magento 2:

Primeiro, tente o compositor.json e procure a palavra-chave version. Se você preferir usar o terminal, pode adicionar algo na raiz do projeto.

composer licenses | grep Version:

Outra maneira de verificar o clima da versão Magento 2 é a edição comunitária ou empresarial, por favor escreva o seguinte

composer licenses | grep Name:

Use o serviço web para verificar https://www.mageplaza.com/check-magento-version/


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.