Получение модели бэкэнда в системе. xml из пути конфигурации в Magento 2 - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь получить имя класса модели бэкэнда из системы. xml Сейчас я использую этот код.

magento / app / code / Company / Sso / etc / adminhtml / system. xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
    <section id="admin">
        <group id="sso_saml" translate="label" sortOrder="100" showInDefault="1" showInWebsite="0" showInStore="0" >
            <label>Single Sign on(SAML)</label>
            <field id="is_enabled" translate="label comment" type="select" sortOrder="0" showInDefault="1" showInWebsite="0" showInStore="0">
                <label>Is Enabled SAML</label>
                <comment>Enable Single Sign On</comment>
                <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
            </field>
        </group>
    </section>
</system>

Magento Code

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$structure = $objectManager->create('Magento\Config\Model\Config\StructureFactory');
$field = $objectManager->create('Magento\Config\Model\Config\Structure')->getElementByConfigPath('admin/sso_saml/is_enabled');
print json_encode($field->getData());

Вывод:

{"id":"is_enabled","path":"admin/sso_saml","_elementType":"field"}

Но мне нужен source_model, кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вот полное решение после реализации решения Мэтта.

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$appState = $objectManager->get('Magento\Framework\App\State');
$field = $appState->emulateAreaCode('adminhtml', function($path){
    $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $appState = $objectManager->get('Magento\Framework\App\State');
    $appState->setAreaCode('adminhtml');
    $field = $objectManager->create('Magento\Config\Model\Config\Structure')
        ->getElementByConfigPath($path->getPath());
    return $field;
}, [$path]);

$value = $path->getData()['backend_model'];
0 голосов
/ 02 марта 2020

Вы должны находиться в области администратора html, чтобы загрузить остальные данные: например,

<?php
require __DIR__ . '/app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$appState = $objectManager->get('Magento\Framework\App\State');
$appState->setAreaCode('adminhtml');
$field = $objectManager->create('Magento\Config\Model\Config\Structure')->getElementByConfigPath('customer/create_account/auto_group_assign');
echo $field->getData()['source_model'];
> Magento\Config\Model\Config\Source\Yesno

Вы можете использовать \Magento\Framework\App\State::emulateAreaCode для извлечения данных изнутри если не необходимо, контекст не для администратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...