Как я могу прочитать версию своего расширения в Magento 2?
В Magento 1.x я смог прочитать версию своего модуля следующим образом:
(string)Mage::getConfig()->getNode('modules/MyModuleName/version');
Я не могу понять, как я могу сделать то же самое в Magento 2.0. Спасибо.
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'];
}
}
Извините, у меня не было времени ввести это в код и тщательно протестировать.
Попробуйте сделать это следующим образом:
$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 ( ) )
Это немного по-другому, но не так сложно.
Все, что вам нужно сделать, это ввести \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'];
}
}
Не уверен, что я полностью понял ваш вопрос, но вы могли бы использовать n98-magerun2
, а затем экспортировать результат:
n98-magerun2 dev:module:list
Все предыдущие ответы извлекают версию установки расширения.
Используйте приведенный ниже код для получения версии композитора расширения.
Случай 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. Код выполняется медленно, и я не советую использовать этот код в области интерфейса. Я предположил, что вам это нужно на собственной странице расширения в админке.