По какой-то причине сеансы не работают в моем Silex-приложении. Я устанавливаю error_reporting в моем php.ini до 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 }}
:
$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 выглядит следующим образом:
<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-> before (function ($ request) {$ request-> getSession() -> start();});' – igorw
@igorw Спасибо, это сделало трюк , Наверное, я не видел дерева для деревьев. Я так привык к тому, что сеанс запущен за сценой из работы с Zend Framework, что я даже не думал о том, чтобы вручную запустить его, – dbrumann
Позвольте мне повторно опубликовать это как ответ. – igorw