Resource "shop" not found failure in console plugin

ich versuche das code von shopware sitemapxml controller in eine console plugin zu benutzen, aber es kommt ein fehler:

[Exception]
Resource "shop" not found failure

ich vermute wir müssen in console plugins sagen welche shop wir meinen, aber wie?
oder was genau heißt diese fehler?

hier mein test code:

subscribeEvent(
            'Shopware_Console_Add_Command',
            'onAddConsoleCommand'
        );
        return true;
    }

    public function onAddConsoleCommand(Enlight_Event_EventArgs $args)
    {
        return new ArrayCollection([
            new SitemapCommand()
        ]);
    }
}

use Shopware\Commands\ShopwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class SitemapCommand extends ShopwareCommand
{
    protected function configure ()
    {
        $this->setName("holabe:sitemap");
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $sitemaprepo = $this->container->get('sitemapxml.repository');
        $sitemap = $sitemaprepo->getSitemapContent();
        print_r($sitemap);
    }
}

ps. FWIW wir sind immernoch auf shopware 5.1.x

Hi wontfix,

das SitemapXMLRepository erzeugt die Sitemap auf Grundlage eines Shops. Im Kontext eines CLI Commands hast du natürlich kein Shop Objekt. Daher taucht die eingangs von dir erwähnte Fehlermeldung auf. 

Du musst dir also selbst ein Shop Objekt erzeugen. Falls du die Shop ID zur Verfügung hast, kannst du mal folgenden Code am Anfang deiner execute Methode ausprobieren:

/** @var \Shopware\Models\Shop\Repository $repository */
$repository = Shopware()->Models()->getRepository('Shopware\Models\Shop\Shop');
$shop = $repository->getActiveById($shopId);

$shop->registerResources(Shopware()->Bootstrap());

Dadurch wird ein Shop mit der gegebenen ID initialisiert und dein Aufruf  auf das SitemapXMLRepository sollte funktionieren

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 Like

cool, danke!

FWIW, wir haben nur ein shop (per shopware code base) und diese zeile (hab von irgendwo kopiert) gibt uns denn shop ohne shopId:

$shop = Shopware()->Models()->getRepository('Shopware\Models\Shop\Shop')->getActiveDefault();