การตอบกลับช้า แต่ก็คุ้มค่าที่จะกล่าวถึงว่าคุณสามารถใช้ tempstore ส่วนตัวสำหรับผู้ใช้ที่ไม่ระบุชื่อตราบใดที่ tempstore สามารถเข้าถึงเซสชันที่ใช้งานอยู่ ในการทำเช่นนั้นคุณต้องฉีดคลาสของคุณด้วยบริการสำหรับที่เก็บ temp เซสชันและผู้ใช้ปัจจุบันเช่น:
public function __construct(PrivateTempStoreFactory $temp_store_factory, SessionManagerInterface $session_manager, AccountInterface $current_user) {
$this->tempStoreFactory = $temp_store_factory;
$this->sessionManager = $session_manager;
$this->currentUser = $current_user;
$this->store = $this->tempStoreFactory->get('myclass.storename');
}
public static function create(ContainerInterface $container) {
return new static(
$container->get('user.private_tempstore'),
$container->get('session_manager'),
$container->get('current_user')
);
}
จากนั้นคุณเพียงแค่ต้องให้แน่ใจว่าคุณเริ่มเซสชันผู้จัดการหากผู้ใช้ไม่ระบุชื่อก่อนที่คุณจะต้องใส่อะไรในเก็บ temp:
if ($this->currentUser->isAnonymous() && !isset($_SESSION['session_started'])) {
$_SESSION['session_started'] = true;
$this->sessionManager->start();
}
คุณอาจพบว่าวิธีนี้ดีกว่าเพราะมันหมายความว่าคุณสามารถใช้ระบบเดียวสำหรับการจัดเก็บชั่วคราวโดยไม่คำนึงว่าผู้ใช้เข้าสู่ระบบ
(ตัวอย่างรหัสของฉันถูกยกขึ้นทุกคำหรือมากกว่าจากบทช่วยสอนที่ยอดเยี่ยมนี้ในการสร้างแบบฟอร์มหลายขั้นตอน )