Neue Pluginstruktur (Shopware 5.2) - Aktivierung verhindern bei fehlerhaften Eingaben

Ein liebes Halli - Hallo an Alle,

Ich versuche mich gerade an der Programmierung (Bin absoluter Neuling) eines Plugins (Artikelabgleich mit der Warenwirtschaft) mit der neuen Struktur (custom/plugins).

Mein Problem:
Ich möchte, dass man schon direkt nach der Installation des Plugins die Datenbank-Verbindungsdaten eingeben muss und diese vor der Aktivierung bzw. beim versuch das Plugin zu aktivieren überprüft werden. Bei fehlgeschlagener Verbindung soll der Benutzer eine Meldung erhalten und das Plugin soll sich nicht aktivieren lassen. Die Formularfelder sind bereits in der config.xml entsprechend konfiguriert und stehen auch nach der Installation zur Verfügung.

ich dachte mir jetzt: Ich schreibe meine Abfrage einfach in die MeinPlugin.php unter:

public function activate(ActivateContext $context)
     {
     /*
     Die Forularfelder aus der config.xml lese ich mit:
     Shopware()->Config()->getByNamespace('MeinPlugin', 'MeinFormularFeldName');
     Im Anschluss teste ich dann die Datenbankverbindung.
     */

     if($verbindungstest == false)
           {
           return array('success'=>false,'message'=>'Verbindung fehlgeschlagen');
           }
     }

Doch leider funktioniert das mit der neuen Plugin-Struktur so nicht (mehr). Ich hab es zwar geschafft eine Nachricht ($context->scheduleMessage(“Meine Fehlermeldung”):wink: auszugeben, aber den Aktivierungsvogang kann ich nicht aufhalten. Ich bin mir nichtmal sicher ob ich $context->scheduleMessage richtig anwende.

Ich hoffe, es kann mir hierbei jemand helfen?

gruß

weeza

 

Hallo,

Probieren Sie 

$context->scheduleMessage("Meine Fehlermeldung");

ich weiß nicht, ob das funktionieren würde.

Viele Grüße,

Ahmad

1 Like

Hallo Ahmad,

natürlich, so hatte ich es auch bereits angewendet. habe es hier nur falsch geschrieben. (hab es oben jetzt geändert)

Hallo weeza,

also ich habe mit scheduleMessage function in meinem Plugin probiert und es gut funktionert ohne Probleme.

für config lesen benuzte ich normalerweise:

$config = $this->container->get('shopware.plugin.config_reader')->getByPluginName($this->getName());

Viele Grüße,

Ahmad

Hi Ahmad,

ja, wie gesagt: Diese Funktionen gehen auch bei mir.

Aber ich kann nicht verhindern das mein Plugin bei fehlerhaften Formulareingaben aktiviert wird.
In der Bootstrap.php ging das mit: return array(‘success’ => false); oder return false in der enable-Funktion

Aber das hat irgendiwe keine Auswirkung in der neuen activate-Funktion

Hallo weeza,

ja, Sie haben Richt.

Aaber als Workaround können Sie verwenden:
 

throw new \Exception('Your Message');

Viele Grüße,

Ahmad