Как я могу прочитать версию своего расширения в Magento 2?


В Magento 1.x я смог прочитать версию своего модуля следующим образом:

(string)Mage::getConfig()->getNode('modules/MyModuleName/version');

Я не могу понять, как я могу сделать то же самое в Magento 2.0. Спасибо.

Author: mapaladiya, 2016-01-29

5 answers

Вы можете внедрить интерфейс Magento\Framework\Module\Modulelist в свой вспомогательный класс модуля, а затем создать вспомогательную функцию для его получения. Что-то вроде;

<?php

namespace [Vendor]\[ModuleName]\Helper;

use Magento\Framework\App\Helper\Context;
use Magento\Framework\Module\ModuleListInterface;

class Data extends AbstractHelper
{
    const MODULE_NAME = 'xxx';

    protected $_moduleList;

    public function __construct(
        Context $context,
        ModuleListInterface $moduleList)
    {
        $this->_moduleList = $moduleList;
        parent::__construct($context);
    }

    public function getVersion()
    {
        return $this->_moduleList
            ->getOne(self::MODULE_NAME)['setup_version'];
    }
}

Извините, у меня не было времени ввести это в код и тщательно протестировать.

 17
Author: Smartie, 2016-01-29 08:34:45

Попробуйте сделать это следующим образом:

$moduleInfo =  $this->_objectManager->get('Magento\Framework\Module\ModuleList')->getOne('SR_Learning'); // SR_Learning is module name

print_r($moduleInfo);

Выход

Array ( [name] => SR_Learning [setup_version] => 2.0.0 [sequence] => Array ( ) )
 7
Author: Sohel Rana, 2016-01-29 08:34:13

Это немного по-другому, но не так сложно.

Все, что вам нужно сделать, это ввести \Magento\Framework\Module\ModuleListInterface через вспомогательный конструктор и использовать его в пользовательской функции.

Вот полный рабочий код, взятый из https://github.com/MagePsycho/magento2-easy-template-path-hints

<?php
namespace MagePsycho\Easypathhints\Helper;

/**
 * Utility Helper
 *
 * @category   MagePsycho
 * @package    MagePsycho_Easypathhints
 * @author     Raj KB <[email protected]>
 * @website    http://www.magepsycho.com
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    /**
     * @var \Magento\Framework\Module\ModuleListInterface
     */
    protected $_moduleList;

    /**
     * @param \Magento\Framework\App\Helper\Context $context
     * @param \Magento\Framework\Module\ModuleListInterface $moduleList
     */
    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Framework\Module\ModuleListInterface $moduleList
    ) {
        $this->_moduleList              = $moduleList;

        parent::__construct($context);
    }



    public function getExtensionVersion()
    {
        $moduleCode = 'MagePsycho_Easypathhints'; #Edit here with your Namespace_Module
        $moduleInfo = $this->_moduleList->getOne($moduleCode);
        return $moduleInfo['setup_version'];
    }
}
 2
Author: MagePsycho, 2016-01-29 08:41:27

Не уверен, что я полностью понял ваш вопрос, но вы могли бы использовать n98-magerun2, а затем экспортировать результат:

n98-magerun2 dev:module:list
 2
Author: Julian Murillo, 2019-10-11 11:48:10

Все предыдущие ответы извлекают версию установки расширения.
Используйте приведенный ниже код для получения версии композитора расширения.

Случай 1. Мы получим версию из файла composer.json из каталога расширений

class VersionFinder
{
    public function __construct(
        \Magento\Framework\App\Utility\Files $files
    ) {
        $this->files = $files;
    }

    public function getVersion()
    {
        $pathToNeededModule = '';

        $composerFilePaths = array_keys(
            $this->files->getComposerFiles(\Magento\Framework\Component\ComponentRegistrar::MODULE)
        );

        foreach ($composerFilePaths as $path) {

            //from app/code - may be specific logic
            if (strpos($path, 'MageWorx/Downloads/composer.json')) {
                $pathToNeededModule = $path;
                break;
            }

            //from vendor - may be specific logic
            if (strpos($path, 'mageworx/module-downloads/composer.json')) {
                $pathToNeededModule = $path;
                break;
            }
        }

        if ($pathToNeededModule) {
            $content = file_get_contents($pathToNeededModule);

            if ($content) {
                $jsonContent = json_decode($content, true);

                if (!empty($jsonContent['version'])) {
                    return $jsonContent['version'];
                }
            }
        }

        return null;
    }
}

Случай 2. Мы получим версию расширения из файла composer.lock.
В этом случае мы можем получить только версии расширений, которые были установлены с помощью установки composer. Если вы найдете версия метапакета композитора - выберите и этот вариант.

class ComposerVersionFinder
{
    /**
     * @var \Magento\Framework\Composer\ComposerInformation
     */
    private $composerInformation;


    public function __construct(
        \Magento\Framework\Composer\ComposerInformation $composerInformation       
    ) {
        $this->composerInformation = $composerInformation;
    }

    public function getVersion()
    {
        $data = $this->composerInformation->getInstalledMagentoPackages();

        if (!empty($data['mageworx/module-customergroupprices']['version'])) {
            var_dump($data['mageworx/module-customergroupprices']['version']);
        }
        return null;
    }
}

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

 0
Author: sergei.sss, 2019-02-27 19:29:21