Как получить версию Magento в Magento2? (Эквивалент Mage :: getVersion ())


Ответы:


20

Вплоть до версии 2.0.7 Magento номер версии оставался 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файл, чтобы увидеть, какая именно версия установлена ​​в данный момент.
7очг

@ 7очем спасибо за информацию, обновил и ответ :)
Атиш Госвами

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();

Подобную реализацию вы можете найти в приложении / code / Magento / Backend / view / adminhtml / templates / page / footer.phtml
Валерий Статичный

1
ПРИМЕЧАНИЕ: это больше не работает для Magento 2.1+ (см. Другие ответы!)
Мануэль М

другой ответ на самом деле работает? В моем случае через сообщение об ошибке. Смотрите мой новый ответ.
Сохель Рана


10

Упомянутые решения не применимы, начиная с Magento 2.1 ( \Magento\Framework\AppInterface::VERSIONпостоянная была удалена)

Новый способ получить версию - извлечь ее из экземпляра метаданных продукта (читает версию из composer.json):

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

(лучше добавить метаданные продукта в конструктор как \Magento\Framework\App\ProductMetadataInterface)


10

Помимо других ответов, вы можете получить основную версию (например, 2.1), зайдя /magento_versionна ваш сайт Magento 2.


Спасибо за указание на это. Похоже, утечка безопасности для меня: это отличный способ для хакеров найти уязвимые сайты Magento 2! Конечно, вы, кажется, только в этом случае можете получить мажорную и минорную версию, но это все равно кажется плохой идеей.
toon81

отличный "быстрый и грязный" трюк, спасибо!
маоизм

6

В случае, если кто-то должен найти его вручную. Базовая версия модуля Magento находится в этом файле композитора:

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);

Вышеприведенный код предназначен исключительно для информационных целей. Вы должны копать больше, чтобы это работало.


6

Вы можете запустить команду ниже, чтобы получить версию magento:

php bin/magento --version

кажется, что это не делает различий между Magento и Community выпусками Enterprise
маоизм

4

Для пользователей Unix, таких как

Нет необходимости писать какой-либо код PHP для этого. Поскольку в Magento 2 используется композитор, все становится проще. Вы можете сделать это двумя способами:

Проверьте composer.json и найдите ключ с именем version. Если вы похожи на меня, кто любит использовать терминал, вы можете сделать что-то вроде в корне проекта.

composer licenses | grep Version:

Возвращает версию M2, если вы хотите проверить версию сообщества или предприятия, а затем просто выполните следующее:

composer licenses | grep Name:

1

просто проверьте файл composer.json в корне magento2, вы найдете такой текст

"version": "2.1.2",

composer.jsonможет содержать ограничение версии, например «^ 2.1», которое не указывает точную версию. Вы должны проверить composer.lockфайл, чтобы увидеть, какая именно версия установлена ​​в данный момент.
7очг


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/


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.