Vì bất kỳ lý do gì, Phiên không hoạt động trong ứng dụng Silex của tôi. Tôi đặt error_reporting trong php.ini của tôi thành E_ALL | E_STRICT
và các lỗi được hiển thị và ghi lại. Không có gì để xem ở đó. Nhưng vì một số lý do không có phiên nào được tạo và không có tệp nào trong /project-root/tmp/sessions/
(và cũng không phải, khi sử dụng session.save_path mặc định). Chuyển sang PdoSessionStorage, để loại trừ các vấn đề với quyền đọc/ghi trên hệ thống tập tin, cũng không mang lại kết quả nào. Tôi cũng đã thử chuyển đổi giữa $app['session']
, $request->getSession()
và $app['request']->getSession()
vô ích.Phiên không hoạt động trong Silex App
Tôi đang ở một mất mát như những nơi khác để tìm kiếm các vấn đề ...
Dưới đây là một thử nghiệm ứng dụng rất đơn giản, tôi đã viết (use
được bỏ qua để tiết kiệm không gian). Về cơ bản thử nghiệm này cho thấy những gì tôi cố gắng đạt được trong ứng dụng thực tế của tôi. Tôi muốn lưu trữ một mảng trong phiên. Trong $app->before()
Tôi kiểm tra xem giá trị đã được đặt chưa rồi chuyển giá trị đó đến giá trị được hiển thị, ví dụ: thông tin đăng nhập: 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 trông như thế này:
<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>
Khi đi/không có gì được hiển thị, khi đi đến/kiểm tra chỉ "nhận được: kiểm tra" được hiển thị (nhưng không thực sự được lưu trữ, vì không trả về/cũng không làm mới các trigger trước đây).
Hãy thử thêm điều này ở trên cùng: '$ app-> before (function ($ request) {$ request-> getSession() -> start();});' – igorw
@igorw Cảm ơn, điều đó đã làm . Tôi không thấy gỗ cho cây, tôi đoán vậy. Tôi rất quen với phiên được bắt đầu đằng sau hậu trường từ làm việc với Zend Framework, rằng tôi thậm chí không nghĩ đến việc khởi động nó theo cách thủ công, – dbrumann
Hãy để tôi đăng lại câu trả lời này như một câu trả lời sau đó. – igorw