sonicsonic MemberComments: 2007 Received thanks: 546 Member since: January 2014 edited January 11

Moin,

ich stehe gerade ein wenig auf dem Schlauch.
Bisher hole ich mir für den Configreader im neuen Pluginsystem die ShopId so (in der PluginName.php).

$this->container->get('Shop')

Beim Rumtesten für eine neues kleines Bastelprojekt bekomme ich nun aber *nichts* zurückgegeben, kann also keine Plugin-Config auslesen, wenn ich den Scope benötige.
In einem anderen Plugin im "echten" Shop geht das so aber nach wie vor noch.

Auch wenn ich es so wie in der Doku https://developers.shopware.com/developers-guide/plugin-configuration/#configure-basic-settings mache, bekomme ich keinen Wert.

Weiter war mich auch erst später aufgefallen, dass nach dem Update auf 5.5.4 ein Cron nicht mehr lief, weil der auch kein "Shop" mehr zur Verfügung steht.
Wie komme ich für den Configreader denn nun an den "Shop"?

private function getConfiguration() {
        /** return Plugin-Configuration from current shop */
        
        return $this->container->get('shopware.plugin.cached_config_reader')->getByPluginName($this->getName(), $this->container->get('Shop'));
    }

Hat sich da bei 5.5 was geändert? Gibts da einen Bug?

Answers

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 6974 Received thanks: 2081 edited January 11 Member since: September 2013

    Glaube im Cron-Kontext musst du den Shop-Kontext erst erzeugen. Hatte das mal hier gemacht:

    https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Plugins/Default/Frontend/Notification/Bootstrap.php#L365-L368

    Bin aber selbst auch nur Hobby Bastler. 

  • sonicsonic MemberComments: 2007 Received thanks: 546 Member since: January 2014

    Nee, Cron war nur beiläufig - da habe ich den "shop" rausgenommen - macht beim Cron ja auch keinen Sinn.

    Hier geht es z.B. um einen Aufruf aus Enlight_Controller_Action_PreDispatch_Frontend_Checkout und Enlight_Controller_Action_PostDispatch_Frontend_Detail
    Ein die($this->container->get('Shop')); im Event liefert auch einfach *nichts*
    Aber auch ohne Shop-Scope liefert mir der Configreader gerade keine Plugin-Config.
    Keine Ahnung, was da grad krumm läuft Undecided

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 6974 Received thanks: 2081 Member since: September 2013

    Wo genau hast du den Code denn? 
    In einem eigenen Subscriber? Oder direkt in der Bootstrap/plugin.php?

    Im Subscriber musst du den Container auf jeden Fall im Construct erzeugen: https://github.com/mnaczenski/MNCountryRiskRule/blob/master/Subscriber/CustomRule.php#L17-L24

    Und auch mit übergeben: https://github.com/mnaczenski/MNCountryRiskRule/blob/master/Resources/services.xml#L13

    Thanked by 1sonic
  • sonicsonic MemberComments: 2007 Received thanks: 546 Member since: January 2014

    Direkt in der "Bootstrap".php, ganz ohne Subscriber & XML.
    Den "Teil" nehme ich mir mit Copy & Paste eigentlich immer aus einem meiner anderen Plugins raus.
    die(var_dump($this->container)) gibt ja auch Inhalte aus. Auch die(var_dump($this->container->get('Shop'))); gibt einen Dump - also ist der "Shop" doch da, dann hat der Configreader wohl nen Schuss Undecided

  • sonicsonic MemberComments: 2007 Received thanks: 546 edited January 11 Member since: January 2014

    Kann geschlossen werden... Depp vor Computer.
    Im onPostDispatchDetail hat sich heimlich ein $ direkt vor einen Kommentar geschummelt - darum wurde dann die Var *falsch* zugewiesen.
    *Rot werd* und ein schönes WE

    $/** get Plugin-Configuration */
    
            $pluginConfig = $this->getPluginConfiguration();
    
            die(var_dump($pluginConfig));

     

Sign In or Register to comment.