Geç cevap ama onun değer, eğer söz edebilir sürece tempstore aktif oturuma erişimi nedeniyle, anonim kullanıcılar için özel tempstore kullanın. Bunu yapmak için, sınıfınıza geçici depo, oturum ve geçerli kullanıcı için aşağıdaki gibi hizmetler vermeniz gerekir:
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')
);
}
Ardından, kullanıcı anonim ise, geçici depoya herhangi bir şey koymadan önce oturum yöneticisini başlattığınızdan emin olmanız gerekir:
if ($this->currentUser->isAnonymous() && !isset($_SESSION['session_started'])) {
$_SESSION['session_started'] = true;
$this->sessionManager->start();
}
Bir kullanıcının oturum açmış olup olmamasına bakılmaksızın, geçici depolama için tek bir sistem kullanabileceğiniz anlamına geldiği için bu yaklaşımı tercih edebilirsiniz.
(Kod örneklerim, çok adımlı formlar oluşturma hakkındaki bu mükemmel öğreticiden az çok kelimeyle kaldırıldı .)