Aktive Benutzerrollen in Plugin-Konfiguration laden

Guten Abend Liebe Shopware-Gemeinde,

ich sitze nun seit einigen Tagen an meinem ersten Plugin und stehe vor dem ersten Problem, auf dessen Lösung ich bisher noch nicht selbst gekommen bin.

Folgende Anforderung:

Ich benötige in der Plugin-Konfiguration (sowohl auf der jeweiligen Plugin-Manager-Seite, als auch in den Grundeinstellungen) die aktuell aktivierten Benutzerrollen. Der erste Aufruf funktioniert tadellos und es werden alle aktiven Benutzerrollen dargestellt. Wird danach allerdings eine Benutzerrolle deaktiviert, bleibt diese weiterhin in der Plugin-Konfiguration stehen. Folgenden Code verwende ich in der besagten Funktionalität:

 

[...]

$repository = Shopware()->Container()->get('models')->getRepository(Role::class);
$roles = $repository->findAll();
    
$selectElementValues = [];
foreach($roles as $role) {
  if($role->getEnabled()) {
    $selectElementValues[] = [$role->getId(), $role->getName()];
  }
}
$form = $this->Form();
$form->setElement('select', 'service-excepting-userroles', [
  'label' => 'Benutzerrollen',
  'multiSelect' => true,
  'store' => $selectElementValues
]);

[...]

 

Dieser Code wird jeweils in der install und createConfiguration Methode aufgerufen. Meine Überlegungen waren Folgende:

* Wird möglicherweise das Ergebnis aus getRepository() gecached? Der Aufruf von $this->disableControllerCache() in der jeweils ersten Zeile brachte jedenfalls nichts

* Sind die verwendeten Methoden überhaupt die Richtigen?

* Werden die Werte in der Datenbank gespeichert? Auch dort habe ich nichts gefunden.

 

Wäre cool, wenn jemand einen Lösungsansatz hätte.

 

Viele Grüße und ein schönes Wochenende

Michael

Die Elemente werden einmalig beim Installieren des Plugins angeleget und in die Datenbank geschrieben. Sie werden nicht beim Öffnen der Konfigurationsseite aktualisiert. Die könntest für deine select Box einen Remote Store verwenden. Wie man das für die Benutzerrollen macht, weis ich allerdings auch nicht.

In der Tabelle s_core_config_forms wird eine Formular für dein Plugin angelegt. Und über die ID findest du in der Tabelle s_core_config_elements dann deine Selectbox.

Wie man einen Remote Store nutzt findest du in der Doku. Plugin configuration