Cronjobs: Kann ich eine Session für einen ausgeführten Cronjob starten?

Hi!

ich versuche einen cronjob zu starten wobei ich innerhalb eine session starten möchte um per curl einen ajax call zu simlulieren. Konkret geht es um ein Auswertungstool dass mir Umsätze für einzelne Artikel generiert. Damit ich diese Tabelle nicht selbst generieren muss würde ich nun gern diese funktion nutzen die es im Backend gibt - eben per cronjob.

 

Hat jemand eine Idee wie ich es schaffe in meinem Cronjob so eine session zu bekommen?

Hey!

soweit ich verstanden hab möchtest du eine Controller Action im Cronjob aufrufen.

protected function execute(InputInterface $input, OutputInterface $output)
    {
        Enlight()->Events()->addListener('Enlight_Controller_Action_Init', [
            $this,
            'setView'
        ]);

        /** @var \Shopware_Controllers_Backend_Analytics $analystic */
        $analystic = Enlight()->Hooks()->Instance('Shopware_Controllers_Backend_Analytics', [
            new \Enlight_Controller_Request_RequestTestCase,
            new \Enlight_Controller_Response_ResponseTestCase
        ]);

        $analystic->setView(new \Enlight_View_Default(Shopware()->Container()->get('template')));

        $analystic->getArticleImpressionsAction();

        print_r($analystic->View()->getAssign());
        die();
    }

    public function setView(\Enlight_Event_EventArgs $eventArgs)
    {
        /** @var \Enlight_Controller_Action $controller */
        $controller = $eventArgs->get('subject');
        $controller->setView(new \Enlight_View_Default(Shopware()->Container()->get('template')));
        $controller->setContainer(Shopware()->Container());
    }

Ich habe hier als Beispiel mal die Action getArticleImpressions aufgerufen. Der ganze Code simuliert eine Browser Anfrage. Mir ist auf die schnelle keine bessere Idee eingefallen, außer den Code aus dem Controller zu kopieren.

Viel Erfolg beim Probieren  Smile

Hi Shyim,

vielen Dank für deine Antwort! Das würde mir super helfen, leider ist das Auswertungstool in unserem Shop ein codiertes Plugin, und ich weis nicht wie ich auf dessen methoden zugreifen kann, daher wollte ich den umweg gehen einfach den Ajax-Aufruf der die Daten zur Anzeige liefert per CURL zu verwenden… Nur ohne gültige Session wird das leider nichts :confused:

 

Wie vorgehesweise müsste bei jeden Controller klappen, du könntest dir via Firebug anschauen, welcher Controller und welche Action vom Kodierten Plugin aufgerufen wird und diese simulieren.

Über CURL eine Anfrage ans Backend zu senden wäre denke ich auch möglich. Du könntest in die Tabelle s_core_sessios_backend eine neue Session anlegen und diese Session ID übergeben bei deinem Request.

Hi Shyim nochmal,

vielen Dank nochmal! Das bringt mir neue inspiration das anzugehen! :slight_smile: Das mit der session einfach faken is genial und gefällt mir ;)

Danke!

LG