cookies in widget setzen

Liebes Forum :slight_smile: :slight_smile: in Shopware kann man ja cookies so setzen: $controller = $arguments-\>getSubject(); $controller-\>Response()-\>setCookie('Testcookie', $value); In einer indexAction eines widgets gibt es aber kein $argument. Wie geht man da vor? Oder setzt man ihn ganz normal per php setcookie() ? LG Kerstin

Hi, die $arguments sind die \Enlight_Event_EventArgs, die du bekommst, wenn du dich mit einem Event auf einen Controller registrierst (bspw. Pre- oder PostDispatch). Wenn du einen eigenen Controller / ein eigenes Widget erzeugst, kannst du einfach mit $this->Response auf das Response-Objekt zugreifen (https://developers.shopware.com/develop … is-request). Besten Gruß, Daniel

ah, das hört sich gut an. Ich habe es analog zu dem “normalen” Aufruf versucht: $this-\>Request()-\>setCookie('Testcookie', rand()); und noch ein paar andere Varianten, funktioniert aber nicht. Wie ist denn die genaue Syntax? LG Kerstin

ich wollte noch einmal nach dem genauen Befehl für das Setzen von cookies fragen. ($this-> … ->setCookie().Ich mache es jetzt zwar mit dem php setcookie() aber wäre ja schöner, es richtig mit shopware zu machen. (Wobei ich gar nicht so genau weiß, was daran besser ist. Wenn ihr das vielleicht auch sagen könntet…) LG Kerstin :slight_smile:

Hi, die Methode setCookie wird auf dem Response-Objekt ausgeführt, siehe: Enlight_Controller_Request_RequestHttp Enlight_Controller_Response_ResponseHttp Das heißt für dich sollte $this-\>Response-\>setCookie('key', 'value'); funktionieren bzw. bei Event-Registrierung $args-\>getSubject()-\>Response()-\>setCookie('key', 'value'); Viele Grüße.

Vielen Dank für die Antwort. Ich habe das getestet. Bei mir wird damit aber auch kein cookie gesetzt. Wahrscheinlich muss ich einen Pfad setzen, muss ich beim “normalen” setcookie auch. Wie macht man das mit shopware? Analog dem php Befehl setcookie funktioniert es glaube ich nicht $this->Response()->setCookie(‘Testcookie2’, ‘afaf’, time()+30, ‘/’); Oder? LG Kerstin

Bei mir funktioniert das Setzen des Cookies mit dieser Variante. Sicher, dass der Cookie nicht da ist? Zum Methoden-Aufruf: Schau doch bitte in die Doku, den Link hast du ja unten.

Danke. [quote]Bei mir funktioniert das Setzen des Cookies mit dieser Variante. Sicher, dass der Cookie nicht da ist?[/quote] Schön für dich :slight_smile: Dann scheint die Syntax ja prinzipiell richtig zu sein. Aber geht nicht. Ich habe den Pfad so gesetzt, dass der cookie überall sichtbar ist (’/’). Aber ich kann ich nicht finden (Chrome->developer Tools unter resourcen. Dort sind die anderen cookies zu sehen). Ich setze parallel auch einen cookie mit php (setcookie) mit den gleichen Parametern (natürlich ein anderer key). Der funktioniert. LG Kerstin

Hm, dann ist komisch. Vielleicht hilfts zu verstehen, wenn du die gesamte Datei mal hier uns zeigst?

Hallo, hier also der Code: <?php class Shopware_Controllers_Widgets_EmotionAction extends Enlight_Controller_Action { public function init() { Shopware()->Template()-\>addTemplateDir(Shopware()-\>Plugins()-\>Frontend()-\>EmotionAction()-\>Path().'Views'); } public function indexAction() { $Zufallscookiephp = $\_COOKIE['Zufallscookiephp']; setcookie('Zufallscookiephp', rand(),0 , '/'); $this-\>View()-\>assign('tt\_Zufallscookiephp', $Zufallscookiephp); $testcookiesw = $\_COOKIE['testcookiesw']; $this-\>Response()-\>setCookie('testcookiesw', 'afaf', 0, '/'); $this-\>View()-\>assign('tt\_testcookiesw', $testcookiesw); } } wie gesagt, setcookie() funktioniert in dem Skript. LG Kerstin

hat jemand eine Idee, warum das bei mir nicht funktioniert? LG Kerstin

Hallo Kerstin,

ich habe das gleiche Fenomen, ich kann in einem Widget Controller kein Cookie durch setCookie setzen.

Mit der nativen PHP-Funktion klappt es wunderbar.

Es scheint ein Shopware Bug zu sein.