Як отримати версію Magento в Magento2? (Еквівалент Mage :: getVersion ())


Відповіді:


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 дякую за інформацію, також оновив відповідь :)
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();

Таку реалізацію ви можете знайти у app / code / Magento / Backend / view / adminhtml / templates / page / footer.phtml
Валерій Статічний

1
ПРИМІТКА: це НІКОЛЬШЕ НЕ працює для Magento 2.1+ (див. Інші відповіді!)
Мануель M

інша відповідь насправді працює? У моєму випадку через звіт про помилки. Дивіться мою нову відповідь.
Сохель Рана


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 від Magento
maoizm

4

Для користувачів типу Unix

Для цього не потрібно писати жодного PHP-коду. Оскільки Magento 2 використовує композитор, це робить все простіше. Це можна зробити двома способами:

Перевірте composer.json і знайдіть ключ, який називається версією. Якщо ви схожі на мене, який любить користуватися терміналом, ви можете зробити щось на кшталт кореня проекту.

composer licenses | grep Version:

Це повертає версію M2, якщо ви хочете перевірити її спільноту або версію підприємства, тоді просто виконайте наступне:

composer licenses | grep Name:

1

просто перевірте файл composer.json у корені magento2, ви знайдете такий текст

"version": "2.1.2",

composer.jsonможе містити обмеження версії типу "^ 2.1", яке не вказує точної версії. Ви повинні перевірити composer.lockфайл, щоб побачити, яка саме версія на даний момент встановлена.
оч


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 і шукайте ключове слово версії. Якщо ви віддаєте перевагу використанню терміналу, ви можете додати щось у корені проекту.

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.