何らかの理由でセッションがSilex-appで動作しません。私はphp.iniのerror_reportingをE_ALL | E_STRICT
に設定し、エラーを表示してログに記録します。そこには何も見えません。しかし何らかの理由でセッションが作成されず、/project-root/tmp/sessions/
にファイルがありません(また、デフォルトのsession.save_pathを使用している場合もありません)。ファイルシステムの読み取り/書き込み許可の問題を排除するために、PdoSessionStorageに切り替えると結果も得られませんでした。私も$app['session']
、$request->getSession()
と$app['request']->getSession()
の間で切り替えることを試みました。セッションはSilex Appで動作しません
私は問題を探すために他にどこまでのように途方に暮れています...ここで
は、私が書いた非常に簡単なテストアプリ(use
は、スペースを節約するために省略されている)です。基本的にこのテストでは、私の実際のアプリで何を達成しようとしているのかを示しています。セッションに配列を格納したい。 $app->before()
で値が設定されているかどうかを確認し、それを表示するために小枝に渡します。ログイン情報:You are logged in as {{ user.name }}
:/ Nothingに行くが表示されたら
<html>
<head><title>test</title></head>
<body>
{% if before is defined %}before: {{ before.key }}{% endif %}
{% if get is defined %}get: {{ get.key }}{% endif %}
</body>
</html>
、へ/テストを行くのみ "を取得::テストは、" 表示されます(ただしれません
$app = new Application;
$app['debug'] = true;
$app->register(new SessionServiceProvider, array(
'session.storage.save_path' => dirname(__DIR__) . '/tmp/sessions'
));
$app->register(new TwigServiceProvider, array(
'twig.path' => __DIR__ . '/views'
));
$app->before(function (Request $request) use ($app) {
// if ($app['debug'] == true) {
// $request->getSession()->set('test', array('key' => 'value'));
// }
if ($request->hasPreviousSession() && $request->getSession()->has('test')) {
$test = $request->getSession()->get('test');
if ($test !== null) {
$app['twig']->addGlobal('before', $test);
}
}
});
$app->get('/', function() use ($app) {
return $app['twig']->render('sessiontest.twig');
});
$app->get('/test', function() use ($app) {
$app['session']->set('test', array('key' => 'value'));
return $app['twig']->render('sessiontest.twig',
array('get' => $app['session']->get('test')));
});
$app->run();
sessiontest.twigは次のようになります実際には、以前にトリガーに戻ったり、トリガーをリフレッシュしたりすることはありません。
これを上に追加してみてください: '$ app-> before(function($ request){$ request-> getSession() - > start();});' – igorw
@igorw 。木の木を見なかったのだろう。私はZend Frameworkで作業しているシーンの裏側でセッションを開始することに慣れています。手動で起動することさえ考えていませんでした。 – dbrumann
答えとして再投稿しましょう。 – igorw