2017-10-05 4 views
0

Ich benutze Zend Framework 3 und den SessionManager und ich versuche, ein Controller Plugin/View Helper zu erstellen, um nach der Validierung einiger Daten Dialoge zu bestätigen. Die Idee war einfach, eine Session-Variable mit allem, was der Bestätigungsdialog benötigt, zu setzen, ihn durch die Ansicht zu lesen und unscharf zu machen. Aber selbst dieser einfache Zyklus schlägt fehl. Das Plugin im Grunde tut dies, wenn von der Steuerung aufgerufen:Sitzungsvariable leer nach dem Unscharfsetzen und Zurücksetzen

$dataArray = [ 
     'some_data' => 'data' 
    ]; 
    $this->sessionManager->getStorage()->confirmDialog = $dataArray; 

im layout.phtml ich meine Ansicht Helper nennen, die tut dies:

public function __invoke() { 
    $data = $this->sessionManager->getStorage()->confirmDialog; 
    $this->sessionManager->getStorage()->clear('confirmDialog'); 
    return $this->getDialog($data); 
} 

ich spritze tun die Sessionmanager sowohl das Plugin und die Hilfe anzeigen Wenn ich die Variable nach Erhalt ihrer Daten nicht lösche, erhalte ich die geänderten Daten von der Sitzungsvariablen und sie wird vom Plugin aktualisiert, wie es sollte. Aber wenn die Variable nach dem ersten Lesen gelöscht wird, ist sie immer leer.

Hier mein global.php Setup:

'session_manager' => [ 
    'validators' => [ 
     RemoteAddr::class, 
     HttpUserAgent::class, 
    ] 
], 
'session_storage' => [ 
    'type' => SessionArrayStorage::class 
] 
+0

Warum benutzen Sie nicht einfach das flashmessenger plugin? https://docs.zendframework.com/zend-mvc-plugin-flashmessenger/ – LWjuniOr

Antwort

1

Da der Wert als Referenz übergeben wird, wenn Sie es deaktivieren, können Sie die gelesenen Informationen mit ihm auch löschen.

Wie ich in einem Kommentar erwähnt habe, schlage ich vor, das Standard-Falsh-Messenger-Plugin zu verwenden, aber wenn Sie Ihr eigenes Plugin erstellen möchten, hier ist ein Hinweis aus dem Quellcode, der Ihnen zeigt, wie Sie eine Standardfreigabe erreichen können Aus der Sitzung lesen.

https://github.com/zendframework/zend-mvc-plugin-flashmessenger/blob/843654a029a19c38e0c3b2e940e59edec75c3e4f/src/FlashMessenger.php#L165

Diese Einstellung ist sagt eigentlich die Sitzung Container, dass die Informationen nach '1 Hop' fallen zu lassen, das heißt. im Falle einer nächsten Anfrage.

+0

danke ich weiß nicht, warum ich nicht sofort an den Flash-Messenger dachte – Lapskaus

Verwandte Themen