Korzystamy z doskonałego modułu uRapidFlow firmy Unirgy, ale wpadliśmy w trochę irytacji. Gdy uruchamiasz jeden z ich profili, dzwonią session_write_close
. Problem polega na tym, że jeśli chcemy uruchomić proces z kontrolera adminhtml, nie możemy ustawić komunikatu flash sesji informującego użytkownika o sukcesie lub przechwyconych wyjątkach.
Czy można ponownie uruchomić sesję po zakończeniu procesu, aby dodać komunikat o sesji?
Początkowo nie byłem pewien, czy można zrestartować sesję w PHP, ale dowód na to, że PHP działa:
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';
Jednak nie byłem w stanie poprawnie ustawić wiadomości flash w sesji adminhtml. Pomyślałem, że mogę zadzwonić po coś w stylu:
Mage::getSingleton('adminhtml/session')
->init('core', 'adminhtml')
->addSuccess('Whoop');
Ale to nie działa.
Odpowiedzi:
To powinno działać:
Sesja nie zostaje utracona
session_write_close()
, jeśli chcesz ponownie napisać do niej sesję, musisz ją ponownie otworzyć. Dowód koncepcji:źródło
session_write_close
).unset($_SESSION)
. Po wykonaniu tej czynnościinit
poprawnie załaduje ponownie sesję.init
wywołania metody (dobrze, wstart
której jest wywoływana przezinit
). Poza tym powinien działać.