Saya bekerja di toko, dan untuk kereta, saya harus menyimpan barang sebelum pembayaran.
$tempstore = \Drupal::service('user.private_tempstore')->get('boutique');
$tempstore->set('poids', $form_state->getValue('poids'));
Saya melihat pada layanan pengguna untuk:
pivate_tempstore dan shared_tempstore
Tetapi itu hanya berfungsi untuk pengguna yang diautentikasi.
Apa yang bisa saya gunakan untuk menyimpan data? $ _SESSION? atau Drupal 8 punya layanan untuk itu?
Jawaban:
Dalam Drupal 8 variabel sesi dapat diakses dari permintaan:
Jika Anda ingin mengatur sesuatu di sesi, Anda dapat melakukan hal berikut:
Atau untuk mengambil variabel sesi:
sumber
Terlambat menjawab, tetapi perlu disebutkan bahwa Anda dapat menggunakan tempstore pribadi untuk pengguna anonim, selama tempstore memiliki akses ke sesi aktif. Untuk melakukannya, Anda perlu menyuntikkan kelas Anda dengan layanan untuk temp store, sesi, dan pengguna saat ini, seperti:
Maka Anda hanya perlu memastikan Anda memulai manajer sesi jika pengguna anonim, sebelum Anda perlu memasukkan apa pun di temp store:
Anda mungkin menemukan pendekatan ini lebih disukai karena itu berarti Anda dapat menggunakan sistem tunggal untuk penyimpanan sementara, terlepas dari apakah pengguna masuk atau tidak.
(Contoh kode saya terangkat lebih atau kurang kata demi kata dari tutorial yang sangat baik tentang membangun formulir multi-langkah ini .)
sumber
Sesi bisa anonim (uid = 0). Anda cukup menggunakan $ _SESSION dan drupal akan membereskan ini.
Simpan data sesi:
Dapatkan data sesi:
Pembaruan 1: Objek Sesi
Sementara masih ada pekerjaan yang terjadi di inti D8, lihat masalah ini Mengonversi penggunaan $ _SESSION ke sesi symfony yang diambil dari permintaan , Anda dapat menggunakan objek sesi dalam permintaan untuk menyimpan data sesi. Tapi jangan campur, data yang Anda simpan dengan salah satu metode ini tidak tersedia di yang lain. Lihat jawaban ini untuk lebih jelasnya Drupal 8 dan Manajemen Sesi :
Pembaruan 2: TempStore
TempStore tampaknya sangat populer di D8. Tetapi terlalu rumit untuk menyimpan beberapa nilai seperti dalam pertanyaan ini. Ini dimaksudkan untuk potongan besar data seperti misalnya data pratinjau atau Tampilan yang tidak disimpan. Berikut adalah catatan perubahan resmi:
Akses data sesi melalui objek Permintaan
API TempStore ditambahkan untuk penyimpanan data non-cache yang terus-menerus dan tidak terputus
sumber
Itu
$this->sessionManager->start();
tidak berfungsi lagi untuk saya karena pembaruan terakhir. Saya mengubahnya menjadi$this->sessionManager->regenerate();
sumber