応答が遅くなりますが、tempstoreがアクティブなセッションにアクセスできる限り、匿名ユーザーにプライベートtempstoreを使用できることに言及する価値があります。そのためには、次のように、一時ストア、セッション、および現在のユーザーのサービスをクラスに注入する必要があります。
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')
);
}
次に、ユーザーが匿名の場合、一時ストアに何かを置く必要がある前に、セッションマネージャーを起動することを確認する必要があります。
if ($this->currentUser->isAnonymous() && !isset($_SESSION['session_started'])) {
$_SESSION['session_started'] = true;
$this->sessionManager->start();
}
このアプローチは、ユーザーがログインしているかどうかに関係なく、一時的なストレージに単一のシステムを使用できることを意味するため、望ましい場合があります。
(私のコード例は、マルチステップフォームの構築に関するこの優れたチュートリアルから多かれ少なかれ逐語的に取り上げられています。)