Làm cách nào để có phiên bản Magento trong Magento2? (Tương đương với Pháp sư :: getVersion ())


23

Làm cách nào để có phiên bản Magento trong Magento2.x (ví dụ 2.0.0)?

Trong Magento1.x, tôi có thể làm điều đó với

Mage::getVersion()

Vậy những gì tương đương trong Magento2.x?

Câu trả lời:


20

Cho đến khi Magento phiên bản 2.0.7, số phiên bản được duy trì AppInterface::VERSIONkhông đổi.

Với việc phát hành Magento 2.1, hằng số đã bị xóa.

Vì vậy, cho đến 2.0.7 nếu bạn kiểm tra tệp chân trang adminhtml nơi phiên bản được hiển thị

Bảng điều khiển quản trị viên

Nó có tham chiếu đến \Magento\Framework\AppInterface::VERSIONhằng số.

Nhưng kể từ khi Magento 2.1 phát hành, tập tin chân trang hiện sử dụng cái \Magento\Backend\Block\Page\Footer::getMagentoVersion()mà lần lượt gọi là \Magento\Framework\App\ProductMetadata::getVersion().

Trước đây ProductMetadata::getVersion()được sử dụng để trả về giá trị của hằng \Magento\Framework\AppInterface::VERSION, nhưng bây giờ nó phân tích cú pháp composer.jsoncũng như composer.lockvà trả về phiên bản magento thích hợp

Vì vậy, bất kể bạn đang ở phiên bản nào trên 2.0.x hoặc 2.1.x, nếu bạn sử dụng \Magento\Framework\App\ProductMetadata::getVersion()phương thức này, bạn sẽ luôn có được phiên bản Magento phù hợp.

Phần kết luận:

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.jsoncó thể chứa một ràng buộc phiên bản như "^ 2.1" không chỉ ra phiên bản chính xác, vì vậy Magento (cũng) đang kiểm tra composer.locktệp để xem phiên bản chính xác nào hiện đang được cài đặt.
7ochem

@ 7ochem cảm ơn vì thông tin, cũng cập nhật câu trả lời :)
Atish Goswami

21

Bạn có thể sử dụng điều này trong các phiên bản 2.0.x:

echo \Magento\Framework\AppInterface::VERSION;

Đối với phiên bản 2.1:

Cách 1, sử dụng DI:

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

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

Cách 2, sử dụng ObjectManager trực tiếp:

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

Việc triển khai như vậy bạn có thể tìm thấy tại app / code / Magento / Backend / view / adminhtml / samples / page / footer.phtml
Valery Statichnyi

1
LƯU Ý: điều này KHÔNG CÓ HƠN làm việc cho Magento 2.1+ (xem các câu trả lời khác!)
Manuel M

câu trả lời khác thực sự làm việc? Trong trường hợp của tôi thông qua báo cáo lỗi. Xem câu trả lời mới của tôi.
Sohel Rana


10

Các giải pháp được đề cập không được áp dụng bắt đầu từ Magento 2.1 ( \Magento\Framework\AppInterface::VERSIONhằng số đã bị xóa)

Cách mới để có phiên bản là truy xuất phiên bản từ Trường hợp siêu dữ liệu sản phẩm (đọc phiên bản từ composer.json):

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

(tốt hơn để tiêm Siêu dữ liệu sản phẩm cho nhà xây dựng như \Magento\Framework\App\ProductMetadataInterface)


10

Ngoài các câu trả lời khác, bạn có thể có phiên bản chính (ví dụ 2.1) bằng cách truy cập /magento_versionvào trang web Magento 2 của bạn.


Cảm ơn đã chỉ ra điều này. Có vẻ như một rò rỉ bảo mật đối với tôi: đây là một cách tuyệt vời để tin tặc tìm thấy các trang web Magento 2 dễ bị tổn thương! Tất nhiên, bạn dường như chỉ có thể có được phiên bản chính và phụ theo cách này, nhưng nó vẫn có vẻ là một ý tưởng tồi.
toon81

mẹo "nhanh & bẩn" tuyệt vời, cảm ơn!
maoizm

6

Trong trường hợp ai đó phải tìm nó bằng tay. Phiên bản mô-đun Magento cơ sở nằm trong tệp soạn thảo này:

vendor/magento/magento2-base/composer.json

Cũng như đề xuất ở trên, để làm cho mã dưới đây hoạt động:

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

\Magento\Framework\App\ProductMetadatabây giờ yêu cầu thể hiện ComposerJsonFinderđược thông qua tại thời điểm khởi tạo.

Một ví dụ tôi tìm thấy trong 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);

Mã trên hoàn toàn cho mục đích thông tin. Bạn phải đào sâu hơn để làm cho nó hoạt động.


6

Bạn có thể chạy lệnh bên dưới để có phiên bản magento:

php bin/magento --version

có vẻ như điều này không phân biệt các phiên bản Cộng đồng và Doanh nghiệp của Magento
maoizm

4

Đối với người dùng unix như người dùng

Không cần phải viết bất kỳ mã PHP nào cho việc này. Bởi vì Magento 2 sử dụng trình soạn thảo, nó làm cho tất cả dễ dàng hơn. Bạn có thể làm điều này theo hai cách:

Kiểm tra composer.json và tìm khóa được gọi là phiên bản. Nếu bạn giống tôi, người thích sử dụng thiết bị đầu cuối, bạn có thể làm một cái gì đó giống như trên thư mục gốc của dự án.

composer licenses | grep Version:

Điều này trả về phiên bản của M2 nếu bạn muốn kiểm tra cộng đồng hoặc phiên bản doanh nghiệp, sau đó chỉ cần làm như sau:

composer licenses | grep Name:

1

chỉ cần kiểm tra tệp composer.json trên root magento2, bạn sẽ tìm thấy văn bản như thế này

"version": "2.1.2",

composer.jsoncó thể chứa một ràng buộc phiên bản như "^ 2.1" không chỉ ra phiên bản chính xác. Bạn nên kiểm tra composer.locktệp để xem phiên bản chính xác nào hiện đang được cài đặt.
7ochem

1

Thử đi:

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

Đối với phiên bản 2.1:

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

Không chỉ hoạt động cho 2.0.x, xem: magento.stackexchange.com/a/96865/13642
Jeroen Vermeulen - Magehost

1

Dưới đây là một số cách để kiểm tra phiên bản Magento

Phương pháp # 1: Sử dụng kiểm tra mã PHP

Kiểm tra phiên bản Magento 1
Mage::getVersion() //will return the magento version
Kiểm tra phiên bản Magento 2

Bạn có thể sử dụng điều này trong các phiên bản 2.0.x:

echo \Magento\Framework\AppInterface::VERSION;

Đối với phiên bản 2.1:

Cách đầu tiên, sử dụng DI:

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

Cách thứ hai, sử dụng ObjectManager trực tiếp:

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

Phương pháp # 2: Kiểm tra phiên bản Magento qua dòng lệnh

Bạn có thể chạy lệnh dưới đây để có phiên bản Magento 2:

php bin/magento --version

Trên thực tế, vì Magento 2 đã sử dụng trình soạn thảo của nó để bạn không cần phải viết bất kỳ mã PHP nào cho việc này. Thay vào đó, có hai tùy chọn để tìm phiên bản Magento 2:

Trước tiên, vui lòng thử composer.json và tìm từ khóa phiên bản. Nếu bạn thích sử dụng terminal, bạn có thể thêm một cái gì đó vào thư mục gốc của dự án.

composer licenses | grep Version:

Một cách khác để kiểm tra thời tiết Magento 2 là phiên bản cộng đồng hoặc doanh nghiệp, vui lòng viết như sau

composer licenses | grep Name:

Sử dụng dịch vụ web để kiểm tra https://www.mageplaza.com/check-magento-version/


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.