Blog

Magento 2: deploymentConfig auslesen

Magento 2: deploymentConfig auslesen

In Magento2 ist es manchmal notwendig, dass man mehrere Konfigurations-Einträge braucht, die man u.a. in seiner Staging- oder Entwicklungsumgebung anders einstellen möchte als bei LIVE.

Lösen kann man das Ganze über die Datei app/etc/env.php.

Tragt hier zuerst einmal eure Config ein, was ihr braucht.
Ich habe das einmal aufgelistet, wie so etwas aussehen könnte.

In unterem Beispiel haben wir die Kategorie my_config_category und eine Eigenschaft config_key, welche den Wert config_value beinhaltet.

<?php
return [
    'my_config_category' => [
        'config_key' => 'config_value'
    ],
    // other default configs
    // ...
]

?>

Nachdem wir in der oberen Datei unsere Eigenschaften definiert haben, kümmern wir uns nun um das Auslesen der Eigenschaften.
Wir spielen das Ganze einmal in einem Helper nach

Wichtig ist, dass ihr euch im Konstruktor die DeploymentConfig zieht und in einer Variable abspeichert, in unserem Fall $deploymentConfig.
Denkt bitte daran, dass ihr das nur über diesen Weg der Dependency Injection löst.
Falls ihr nicht wisst was das ist, könnt ihr es gerne hier nachlesen: https://devdocs.magento.com/guides/v2.3/extension-dev-guide/depend-inj.html

In der Funktion getMyConfigValue werden wir die Config nun auslesen.
Indem ihr die get-Funktion des Config-Objekts aufruft könnt ihr nun mit der Übergabe der Kategorie und Eigenschaft als String (also my_config_category/config_key) den Wert aus eurer env.php auslesen.

<?php

use Magento\Framework\App\DeploymentConfig;

class Data extends AbstractHelper {

    /** @var DeploymentConfig */
    private $deploymentConfig;
    
    public function __construct(DeploymentConfig $deploymentConfig) {
        $this->deploymentConfig = $deploymentConfig;
    }

    public function getMyConfigValue() {
        // will return the string "config_value" from the app/etc/env.php
        return $this->deploymentConfig->get("my_config_category/config_key");
    }
        
}

Das war es auch schon.
Bitte denkt daran, dass ihr auf keinen Fall Objekte wie die Config direkt über den ObjectManager ladet: https://devdocs.magento.com/guides/v2.3/extension-dev-guide/object-manager.html

Es ist zwar möglich, so vorzugehen, allerdings rät wirklich jeder davon ab, da das so von Magento2 nicht gedacht ist.
Ihr müsst zwar die Scripts nach einer solchen Änderung kompilieren, was nach Entwicklungsumgebung auch bei mir schon mal 15Minuten gedauert hat, ja. Aber in dem Fall sollte man wirklich viel Wert auf sauberen Code legen.

Da Magento sich diesen Weg mit dem ObjectManager selbst nicht wünscht, ist es auch gut möglich, dass Magento das früher oder später selbst sperrt. Also in diesem Fall lieber sauber bleiben.

Wenn ihr Fragen zu diesem Thema oder der Dependency Injection habt, fragt mich gerne.

Leave a comment