วิธีรับเวอร์ชัน 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และส่งกลับรุ่นวีโอไอพีที่เหมาะสม

ดังนั้นไม่ว่าคุณจะใช้เวอร์ชันใดในเวอร์ชัน 2.0.x หรือ 2.1.x หากคุณใช้\Magento\Framework\App\ProductMetadata::getVersion()วิธีนี้คุณจะได้รับเวอร์ชันวีโอไอพีที่เหมาะสมเสมอ

สรุป:

วีโอไอพี 1:

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

วีโอไอพี 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" ซึ่งไม่ได้ระบุรุ่นที่แน่นอนดังนั้นวีโอไอพีคือ (เช่น) ตรวจสอบcomposer.lockไฟล์เพื่อดูเวอร์ชันที่แน่นอนที่ติดตั้งอยู่ในปัจจุบัน
7ochem

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

การใช้งานดังกล่าวคุณสามารถดูได้ที่แอป / รหัส / วีโอไอพี / แบ็กเอนด์ / ดู / adminhtml / แม่แบบ / หน้า / footer.phtml
Valery Statichnyi

1
หมายเหตุ: สิ่งนี้ใช้ไม่ได้กับ Magento 2.1+ (ดูคำตอบอื่น ๆ !)
Manuel M

คำตอบอื่น ๆ ใช้งานได้จริง? ในกรณีของฉันผ่านรายงานข้อผิดพลาด ดูคำตอบใหม่ของฉัน
Sohel Rana


10

โซลูชันที่กล่าวถึงไม่สามารถใช้ได้เริ่มต้นจาก Magento 2.1 ( \Magento\Framework\AppInterface::VERSIONค่าคงที่ถูกลบ)

วิธีใหม่ในการรับเวอร์ชันคือการดึงมาจาก Product Metadata Instance (อ่าน version จาก composer.json):

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

(ดีกว่าที่จะฉีดข้อมูลเมตาของผลิตภัณฑ์ไปยังตัวสร้าง\Magento\Framework\App\ProductMetadataInterface)


10

ด้านบนของคำตอบอื่น ๆ คุณจะได้รับรุ่นใหญ่ (เช่น 2.1) โดยการเข้าถึง/magento_versionบนวีโอไอพี 2 เว็บไซต์ของคุณ


ขอบคุณที่ชี้นำสิ่งนี้ ดูเหมือนว่าการรักษาความปลอดภัยรั่วไหลมาให้ฉัน: นี่เป็นวิธีที่ดีสำหรับแฮกเกอร์ในการค้นหาเว็บไซต์ Magento 2 ที่มีช่องโหว่! แน่นอนคุณดูเหมือนจะสามารถได้รับรุ่นใหญ่และรุ่นรองด้วยวิธีนี้ แต่ก็ยังดูเหมือนเป็นความคิดที่ไม่ดี
toon81

เคล็ดลับ "เร็ว & สกปรก" ยอดเยี่ยมขอบคุณ!
maoizm

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

คุณสามารถเรียกใช้คำสั่งด้านล่างเพื่อรับเวอร์ชั่นวีโอไอพี:

php bin/magento --version

ดูเหมือนว่าสิ่งนี้จะไม่แยกความแตกต่างระหว่าง Community vs. Enterprise ของ Magento
maoizm

4

สำหรับยูนิกซ์เช่นผู้ใช้

ไม่จำเป็นต้องเขียนโค้ด PHP สำหรับสิ่งนี้ เนื่องจาก Magento 2 ใช้นักแต่งเพลงมันทำให้ทุกอย่างง่ายขึ้น คุณสามารถทำได้สองวิธี:

ตรวจสอบ composer.json และค้นหาคีย์ที่เรียกว่าเวอร์ชัน หากคุณเป็นเหมือนฉันที่ชอบใช้เครื่องเทอร์มินัลคุณสามารถทำสิ่งที่ชอบในรากของโครงการ

composer licenses | grep Version:

นี่จะคืนค่าเวอร์ชันของ M2 หากคุณต้องการตรวจสอบสภาพแวดล้อมของชุมชนหรือรุ่นองค์กรจากนั้นทำต่อไปนี้:

composer licenses | grep Name:

1

เพียงตรวจสอบไฟล์ composer.json บน root ของ magento2 คุณจะพบข้อความเช่นนี้

"version": "2.1.2",

composer.jsonอาจมีข้อ จำกัด รุ่นเช่น "^ 2.1" ซึ่งไม่ได้ระบุรุ่นที่แน่นอน คุณควรตรวจสอบcomposer.lockไฟล์เพื่อดูเวอร์ชันที่แน่นอนที่ติดตั้งอยู่ในปัจจุบัน
7ochem

1

ลองสิ่งนี้:

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

สำหรับเวอร์ชัน 2.1:

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

ใช้งานได้กับ 2.0.x เท่านั้นดู: magento.stackexchange.com/a/96865/13642
Jeroen Vermeulen - MageHost

1

ต่อไปนี้เป็นวิธีตรวจสอบเวอร์ชันของวีโอไอพี

วิธีที่ # 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 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/


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.