Acceder a los valores de configuración en Magento2

Configuración de Magento2

Hace un tiempo, a manera de ejemplo (bastante acotado), había escrito sobre cómo crear configuraciones para nuestro módulo.

El mini post de hoy es para ver cómo, desde el código de nuestro módulo, podemos acceder a esos valores y, en base a lo obtenido, actuar de tal o cual manera.

Como de costumbre, voy a usar el módulo Barbanet_SampleModule para jugar.

En el módulo ya habíamos visto cómo crear un comando para la consola. Ahora vamos a hacer que nuestro comando se comporte de diferente forma según se haya aplicado una configuración.

Para esto, voy a hacer uso del Helper que había creado para obtener los valores de la configuración desde otros lugares.

El helper se veía así:

namespace Barbanet\SampleModule\Helper;
 
use Magento\Framework\App\Helper\AbstractHelper;
 
/**
 * SampleModule base helper
 */
class Data extends AbstractHelper
{
 
    public function convertText($text)
    {
        return strtoupper($text);
    }
}

Yo ahora voy a agregar un par de métodos. El primero lo voy a usar para acceder a cualquiera de las otras claves de la configuración de mi módulo sin tener que repetir tanto:

private function getConfig($path, $store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE)
{
    return $this->scopeConfig->getValue(
        'samplemodule/' . $path,
        $store
    );
}

Y ahora si, por ejemplo, el método que me indicará si está habilitado:

public function isEnabled()
{
    return $this->getConfig('sample/enabled');
}

El código final resultante será:

namespace Barbanet\SampleModule\Helper;
 
use Magento\Framework\App\Helper\AbstractHelper;
 
/**
 * SampleModule base helper
 */
class Data extends AbstractHelper
{
 
    /**
     * @param $path
     * @param string $store
     * @return mixed
     */
    protected function getConfig($path, $store = \Magento\Store\Model\ScopeInterface::SCOPE_STORE)
    {
        return $this->scopeConfig->getValue(
            'samplemodule/' . $path,
            $store
        );
    }
 
    public function isEnabled()
    {
        return $this->getConfig('sample/enabled');
    }
 
    /**
     * @param $text
     * @return string
     */
    public function convertText($text)
    {
        return strtoupper($text);
    }
}

Paso siguiente, volver a nuestro comando, el cual, en el último ejemplo, contenía este código:

namespace Barbanet\SampleModule\Console;
 
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
 
/**
 * Class Hello
 * @package Barbanet\SampleModule\Console
 */
class Hello extends Command
{
 
    protected function configure()
    {
        $this->setName('samplemodule:hello');
        $this->setDescription('Barbanet_SampleModule Hello sample command');
    }
 
    /**
     * @param InputInterface $input
     * @param OutputInterface $output
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln("My Sample Module message: Hello World!");
    }
}

Ahora, voy a hacer 3 cosas:

  1. Agregar una variable privada.
  2. Inyectar mi helper en el consturctor del comando.
  3. Usar un método en el comando para alterar el resultado.

El código final:

namespace Barbanet\SampleModule\Console;
 
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
 
/**
 * Class Hello
 * @package Barbanet\SampleModule\Console
 */
class Hello extends Command
{
 
    /**
     * @var
     */
    private $helper;
 
    /**
     * @param \Barbanet\SampleModule\Helper\Data $helper
     * @param null $name
     */
    public function __construct(
        \Barbanet\SampleModule\Helper\Data $helper,
        $name = null
    ) {
        $this->helper = $helper;
        parent::__construct($name);
    }
 
    protected function configure()
    {
        $this->setName('samplemodule:hello');
        $this->setDescription('Barbanet_SampleModule Hello sample command');
    }
 
    /**
     * @param InputInterface $input
     * @param OutputInterface $output
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        if (!$this->helper->isEnabled()) {
            $output->writeln("Barbanet_SampleModule is disabled. Check your configuration.");
            return false;
        }
        $output->writeln("My Sample Module message: Hello World!");
    }
}

Momento de probar si la teoría es correcta.

Ingreso al backend y miro mi configuración:

Configuración del módulo Barbanet_SampleModule

Se supone que está habilitado, por lo cual, si ejecutamos en nuestra consola:

bin/magento samplemodule:hello

Deberíamos obtener este mensaje:

Salida del comando Hello del módulo Barbanet_SampleModule

Pero si ahora volvemos a la configuración y deshabilitamos el módulo:

Configuración del módulo Barbanet_SampleModule

Y ejecutamos el comando nuevamente:

bin/magento samplemodule:hello

Deberíamos obtener este otro mensaje mensaje:

Salida del comando Hello del módulo Barbanet_SampleModule

Todo lo comentado sobre el módulo Barbanet_SampleModule está disponible en GitHub bajo el tag 2.15.0.