如何在Magento2中获取Magento版本?(相当于Mage :: getVersion())


Answers:


20

直到Magento 2.0.7版为止,版本号一直保持AppInterface::VERSION不变。

随着Magento 2.1的发布,常数被删除。

所以直到2.0.7,如果您检查显示版本的adminhtml页脚文件

管理面板页脚

它提到了\Magento\Framework\AppInterface::VERSION常数。

但是自从Magento 2.1发行以来,页脚文件现在使用,\Magento\Backend\Block\Page\Footer::getMagentoVersion()而该文件又称为\Magento\Framework\App\ProductMetadata::getVersion()

以前,ProductMetadata::getVersion()用于返回常量的值\Magento\Framework\AppInterface::VERSION,但现在它解析composer.json以及composer.lock和返回相应的Magento版本

因此,无论您使用的是2.0.x还是2.1.x上的哪个版本,如果使用该\Magento\Framework\App\ProductMetadata::getVersion()方法,都将始终获得正确的Magento版本。

结论:

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.json可能包含诸如“ ^ 2.1”之类的版本约束,该约束未指示确切的版本,因此Magento(也在)检查composer.lock文件以查看当前安装的确切版本。
7ochem '18年

@ 7ochem感谢您提供信息,并更新了答案:)
Atish Goswami

21

您可以在2.0.x版本中使用它:

echo \Magento\Framework\AppInterface::VERSION;

对于2.1版:

方式1,使用DI:

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

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

方法2,直接使用ObjectManager:

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

这样的实现,你可以在找到应用程序/代码/ Magento的/后端/视图/ adminhtml /模板/页/ footer.phtml
瓦列里Statichnyi

1
注意:这对Magento 2.1+无效(请参见其他答案!)
Manuel M

其他答案确实有效吗?以我为例,通过错误报告。看到我的新答案。
Sohel Rana


10

提及的解决方案从Magento 2.1开始不适用\Magento\Framework\AppInterface::VERSION已删除常数)

获取版本的新方法是从产品元数据实例检索它(从composer.json读取版本):

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

(最好将产品元数据作为注入到构造函数中\Magento\Framework\App\ProductMetadataInterface


10

除了其他答案,您还可以通过访问Magento 2网站获得主要版本(例如2.1)/magento_version


感谢您指出了这一点。在我看来,这似乎是安全漏洞:这是黑客找到易受攻击的Magento 2网站的好方法!当然,您似乎只能以这种方式获取主要版本和次要版本,但这仍然是一个坏主意。
toon81 '17

伟大的“快速而肮脏的”把戏,谢谢!
maoizm's

6

万一有人必须手动找到它。基本的Magento模块版本位于此composer文件中:

vendor/magento/magento2-base/composer.json

同样如上述建议,要使以下代码起作用:

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

\Magento\Framework\App\ProductMetadata现在要求实例化ComposerJsonFinder时传递的实例。

我在发现的一个例子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);

以上代码仅用于提供信息。您必须进一步挖掘才能使其工作。



4

对于喜欢Unix的用户

无需为此编写任何PHP代码。由于Magento 2利用了作曲器,因此使一切变得简单。您可以通过两种方式执行此操作:

检查composer.json并查找名为version的密钥。如果您像我一样喜欢使用终端,则可以在项目的根目录上执行类似的操作。

composer licenses | grep Version:

如果要检查其社区版本或企业版本,则返回M2的版本,然后执行以下操作:

composer licenses | grep Name:

1

只需检查magento2根目录上的composer.json文件,您会发现这样的文本

"version": "2.1.2",

composer.json可能包含“ ^ 2.1”之类的版本约束,但未指明确切的版本。您应该检查composer.lock文件以查看当前安装的确切版本。
7ochem '18年


1

以下是一些检查Magento版本的方法

方法1:使用PHP代码检查

检查Magento 1版本
Mage::getVersion() //will return the magento version
检查Magento 2版本

您可以在2.0.x版本中使用它:

echo \Magento\Framework\AppInterface::VERSION;

对于2.1版:

第一种方法,使用DI:

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

第二种方法,直接使用ObjectManager:

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

方法2:通过命令行检查Magento版本

您可以运行以下命令以获取Magento 2版本:

php bin/magento --version

实际上,由于Magento 2已利用其作曲器,因此您无需为此编写任何PHP代码。相反,有两种方法可以找到Magento 2版本:

首先,请尝试composer.json并查找version关键字。如果您更喜欢使用终端,则可以在项目的根目录中添加一些内容。

composer licenses | grep Version:

检查Magento 2版本天气的另一种方法是社区版或企业版,请输入以下内容

composer licenses | grep Name:

使用网络服务检查https://www.mageplaza.com/check-magento-version/


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.