Umgebungsvariable für Plugins

Hallo,

in unserem aktuellen Projekt müssen wir ca. 4 eigene Plugins entwickeln, die allesamt Zugriff auf einen bestimmten Wert eines Kunden benötigen. Da dieser Wert für die unterschiedlichen Umgebungen (Produktion, Staging, Test) verschieden sein kann, dachten wir daran, diesen Wert in der config.php als Variable einzutragen und in den Plugins darauf zuzugreifen.

Die config.php ist nicht im Source Code Repository enthalten, sondern wird nach einem Deployment auf dem jeweiligen Server eingeschossen, liegt also schon auf jedem Server im File System.

Nun die Frage: Ist das eine gute Idee oder wo würdet Ihr generell solche Werte eintragen, um an diversen Stellen des eigenen Source Codes darauf zugreifen zu können?

EDIT: Wenn ich die globale Config mal etwas genauer betrachte scheint sie mir nicht wirklich darauf ausgelegt zu sein, um eigene Konfigurationen dort einzutragen und sodann im Code abzufragen.

Danke für Eure Meinungen.

Danke für Eure Meinungen.

Verstehe die Frage dazu nicht ganz bzw. sehe nicht das Problem zum Anliegen. Auf die Kundendaten kannst du fast überall drauf zugreifen. Ihr könnt ja auch die SW Session benutzen, so wie das Shopware eben auch macht. 

Ok, konkretes Beispiel: Für einen bestimmten Shop Kunden X müssen wir z.B. nach einer Bestellung zusätzliche Arbeiten erledigen. Um nun in unseren Plugins erkennen zu können, dass eine Bestellung des Kunden X vorliegt, wollten wir dessen customernumber irgendwo fix hinterlegen (eben z.B. in der config.php). Dieser Wert wäre dann von überall und zu jeder Zeit abfragbar und muss pro Umgebung (Produktion, Staging, … einmal dort hinterlegt werden) - mit einer Session kriegst Du das nicht hin.

Ok, und wenn ihr für eurer Plugin eine Tabelle in der DB anlegt? Alternativ könnte man auch eine config.ini irgendwo ablegen. Also Möglichkeiten gibt es viele, um eben nicht die config.php zu überschreiben.

Wäre wohl möglich, erscheint mir jetzt aber etwas Overkill zu sein für genau einen Wert dort drin zu halten.

Also ICH persönlich würde so etwas nicht über die config.php machen. Machen andere Plugin-Programmierer auch nicht :slight_smile:

Gibt’s denn noch eine andere Config, die vielleicht nicht ganz so global ist und aber trotzdem noch über der Ebene der Plugin Configs liegt, damit man von allen eigenen Plugins drauf zugreifen kann?

Ansonsten geht das tatsächlich nur über eine DB Erweiterung?

Na ihr nutzt den DependencyContainer. Der eignet sich perfekt dafür, da Shopware dort alle Konfigurationen zur Verfügung stellt. Wie ihr darauf zugreift, kommt aber auf die Stelle an.

Angenommen eure Config.php sieht wie folgt aus:

 [
    'username' => 'xxxx',
    'password' => 'xxx',
    'dbname' => 'xxx',
    'host' => 'localhost',
    'port' => '3306'
  ],
  // Euere Einstellungen mit zwei Testwerten
  'eure_config' => [
    'environment' => 'prod',
    'wert1' => 'abc'
  ]
];

Wenn ihr das neue Pluginsystem verwendet, könnt ihr euch die Variable direkt in den Konstruktor übergeben lassen.

            %shopware.eure_config.environment%

Oder wenn ihr Zugriff auf den DI-Container habt, dann mit getParameter (altes Plugin-System oder Controller):

getParameter('shopware.eure_config.wert1');

Viele Grüße

1 Like

Hmm, naja rein theoretisch kannst du alles mögliche über die DB lösen. Eintrag in die s_core_config_elements oder s_user_attributes. Es gibt viele Plugin die auch eigene Tabellen anlegen. Das ist doch alles schnell gemacht. Über ein globales Plugin kann ja dann die Kundennumer im Backend eingestellt werden.

Danke Euch beiden! Die Lösung von simkli läuft einwandfrei und wir werden wohl diesen Weg gehen.

Betrifft das nur einen bestimmten User im Shop?

Ja genau.