session_write_closeが呼び出された後、セッションメッセージをどのように追加しますか?


9

私たちは、Unirgyの優れたuRapidFlowモジュールを使用していますが、少し不快に感じました。いずれかのプロファイルを実行すると、が呼び出されますsession_write_close。これの問題は、adminhtmlコントローラーからプロセスを実行したい場合、セッションフラッシュメッセージを設定してユーザーに成功またはキャッチされた例外を通知できないことを意味します。

セッションメッセージを追加するために、プロセスの完了後にセッションを再開することはできますか?

PHPでセッションを再開できるかどうか最初はわかりませんでしたが、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();
// set a value to see if it takes
$_SESSION['foo'] = 'foo';

adminhtmlセッションでフラッシュメッセージを正しく設定できませんでした。私は次のように何かを呼ぶことができるかもしれないと思った:

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

しかし、これはうまくいかないようです。


プロファイルの実行中に顧客にメッセージを表示したい場合は、$ pofile-> getLogger()を使用してロガーのインスタンスを取得し、それにロガーにメッセージを渡すことができます。ページにそれらを表示することと同じではありませんが、それらを記録できます
Petar Dzhambazov 2013年

回答:


4

これはうまくいくはずです:

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

後にセッションが失われることはありません。session_write_close()セッションに再度書き込みたい場合は、セッションを再度開く必要があります。コンセプトの証明:

<?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';

$ _SESSIONが設定されていない場合にのみ呼び出されるため、セッションでinitを呼び出してもsession_startは呼び出されません(これはを呼び出した後のようですsession_write_close)。
Peter O'Callaghan

これを行うことに興味のある人にとって、それを正しく機能させるためにはあなたがしなければなりませんunset($_SESSION)。これをinit行うと、セッションが正しく再ロードされます。
Peter O'Callaghan

@Cags私は私の答えを更新しました、それが正しいかどうか確認できますか?
Rick Kuipers

initメソッドの呼び出しの一部として呼び出されるため、session_startは必要ありません(この呼び出しstartはによって呼び出されますinit)。それ以外は、うまくいくはずです。
Peter O'Callaghan

@Cagsありがとう、私は私の答えを更新しました!フィードバックをお寄せいただきありがとうございます:)
Rick Kuipers
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.