Come si aggiunge un messaggio di sessione dopo aver chiamato session_write_close?


9

Usiamo l'eccellente modulo uRapidFlow di Unirgy, ma abbiamo riscontrato un po 'di fastidio. Quando si esegue uno dei loro profili, chiamano session_write_close. Il problema è che se vogliamo eseguire un processo da un controller adminhtml non possiamo impostare un messaggio flash di sessione per informare l'utente del successo o delle eccezioni rilevate.

È possibile riavviare la sessione al termine del processo, al fine di aggiungere un messaggio di sessione?

Inizialmente non ero sicuro che fosse possibile riavviare una sessione in PHP, ma la prova del concetto PHP funziona:

session_start();
// if this is the second run, show the value
if (!empty($_SESSION['foo'])) {
    echo $_SESSION['foo'], PHP_EOL;
}
// set an initial value
$_SESSION['foo'] = 'bar';

// start running profile
session_write_close();
// after running profile
session_start();
// set a value to see if it takes
$_SESSION['foo'] = 'foo';

Tuttavia, non sono stato in grado di impostare correttamente un messaggio flash nella sessione adminhtml. Ho pensato di poter chiamare qualcosa sulla falsariga di:

Mage::getSingleton('adminhtml/session')
    ->init('core', 'adminhtml')
    ->addSuccess('Whoop');

Ma questo non sembra funzionare.


Se si desidera mostrare i messaggi al cliente durante l'esecuzione del profilo, è possibile utilizzare $ pofile-> getLogger () per ottenere l'istanza del logger e passarvi i messaggi. Non è lo stesso che mostrarli nella pagina, ma ne avrai traccia
Petar Dzhambazov,

Risposte:


4

Questo dovrebbe funzionare:

unset($_SESSION);
Mage::getSingleton('adminhtml/session')
    ->init('core', 'adminhtml')
    ->addSuccess('Whoop');

La sessione non viene persa dopo session_write_close(), se si desidera scrivere nuovamente nella sessione, è necessario riaprirla. Verifica teorica:

<?php
session_start();
// if this is the second run, show the value
if (!empty($_SESSION['foo'])) {
    echo $_SESSION['foo'], PHP_EOL;
}
// set an initial value
$_SESSION['foo'] = 'bar';

// start running profile
session_write_close();

// after running profile
session_start();
var_dump($_SESSION);
//// set a value to see if it takes
$_SESSION['test'] = 'foo';

Chiamare init sulla sessione non attiverà la chiamata a session_start, poiché viene chiamato solo se $ _SESSION non è impostato (come sembra dopo la chiamata session_write_close).
Peter O'Callaghan,

Per chiunque sia interessato a farlo, per farlo funzionare correttamente devi farlo unset($_SESSION). Dopo aver fatto ciò init, la sessione verrà ricaricata correttamente.
Peter O'Callaghan,

@Cags Ho aggiornato la mia risposta, puoi verificare se è corretta?
Rick Kuipers,

Session_start non è richiesto in quanto viene chiamato come parte della initchiamata del metodo (bene in startcui viene chiamato da init). A parte questo, dovrebbe funzionare.
Peter O'Callaghan,

@Cags Grazie, ho aggiornato la mia risposta! Apprezzo il tuo ritorno con feedback :)
Rick Kuipers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.