Як отримати версію 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.