hi, ich habe ein Frontendplugin mit einem Backendcontroller erstellt, welches beim Aufruf ein ein anderes Backendplugin aufruft. Das funktioniert alles bestens. Leider benutzt das Backendplugin den Shopwaremediamanager um Bilder zu importieren und da bekomme ich leider ein Authentifizierungsproblem, da ich keine Backendsession besitze, weil dieses ja über eine url http://meinshop/backen/plugin aufgrufen wird. Der Grund ist, das ich diesen url für einen Cronjob nutzen will. Gibt es eine Möglichkeit eine Backendsession aus meinem Controller selbst zu erzeugen für die Zeit, die das Plugin aktiv ist? Ich habe schon versucht, mit curl auf die REST-API zuzugreifen, in der Hoffnung das dies eine Backendsession erzeugt aber var_dump($this->Application()->getOption(‘backendSession’, array()) ); im Plugin gibt mir zurück, das ich anscheinend doch keine besitze. Bootstrap: class Shopware\_Plugins\_Frontend\_sisCronWawi\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { private $id; public function install() { $this-\>subscribeEvent ( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Backend\_UpdateWAWI', 'onGetControllerPath' ); } public function onGetControllerPath(Enlight\_Event\_EventArgs $args) { return $this-\>Path () . '/Controllers/Frontend/updateWawi.php'; } public function goUpdateStock() { //Aufruf des Backendplugins mit $var = new BackendPlugin( 'Cron', $id ); //Hier wird intern der Mediamanager aufgreufen und hier fehlt in dem Moment auch die Backendsession //$var-\>import(); } }
Controller: class Shopware\_Controllers\_Backend\_UpdateWAWI extends Enlight\_Controller\_Action{ protected $cURL; public function init(){ Shopware()-\>Plugins()-\>Controller()-\>ViewRenderer()-\>setNoRender(); $config= Shopware()-\>Plugins()-\>Frontend()-\>sisCronWawi()-\>Config(); $user = $config-\>get('cronuser'); $apikey = $config-\>get('apikey'); $this-\>cURL=curl\_init(); curl\_setopt($this-\>cURL, CURLOPT\_RETURNTRANSFER, true); curl\_setopt($this-\>cURL, CURLOPT\_FOLLOWLOCATION, true); curl\_setopt($this-\>cURL, CURLOPT\_HTTPAUTH, CURLAUTH\_DIGEST); curl\_setopt($this-\>cURL, CURLOPT\_USERPWD, $user . ':' . $apikey); curl\_setopt($this-\>cURL, CURLOPT\_HTTPHEADER, array( 'Content-Type: application/json; charset=utf-8', )); $url = 'http://meinshop/api/articles'; curl\_setopt($this-\>cURL, CURLOPT\_URL, $url); $result = curl\_exec($this-\>cURL); $httpCode = curl\_getinfo($this-\>cURL, CURLINFO\_HTTP\_CODE); if($error!="1"){ Shopware()-\>Plugins()-\>Frontend()-\>sisCronWawi()-\>goUpdateStock(); echo $type." war für Shop ".$\_GET['config']. " Erfolgreich!"; } exit; } }
Hat jemand eine Idee was ich falsch gemacht habe oder wie ich auf anderem Weg an eine Backendsession komme? Anscheinend ist die Session ja wieder weg wenn die Api fertig ist mit der Rückgabe… Viele Grüße mattis
Niemand eine Idee? Vielleicht könnte jemand von Shopware mal einige Worte dazu sagen? Gruß mattis
[quote=„mattis“] Vielleicht könnte jemand von Shopware mal einige Worte dazu sagen? [/quote] Ich hänge leider immer noch an dieser Stelle ;( Gruß
Hi Mattis, ich bin mir nicht ganz sicher, was du genau vorhast. Gibt es keine Möglichkeit, ohne Session zu arbeiten? Auf das Media-Model hast du doch auch ohne BackendSession Zugriff, das nutzen alte API und neue API ja auch so. Grundsätzlich kannst du dir das Ganze natürlich in /engine/Shopware/Controllers/Backend/Login.php einfach mal ansehen - mir scheint das aber keine gute Idee zu sein - besonders weil unsere BE-Session ja auch von Zeit zu Zeit erneuert werden muss vgl. /engine/Shopware/Controllers/Backend/Login.php => getLoginStatusAction(). Grundsätzlich kannst du die Session für einzelne Controller auch deaktivieren - aber dann kannst du den Controller auch direkt ins Frontend legen - das ist also normalerweise auch nicht der Weg, den du gehen möchtest. Versuch das Ganze nochmal etwas runter zu brechen: Welcher Call bricht in deinem CronJob, weil du keine Session hast? Danke schonmal und bis später Daniel