Estou trabalhando em uma loja e, para o carrinho, preciso armazenar itens antes do pagamento.
$tempstore = \Drupal::service('user.private_tempstore')->get('boutique');
$tempstore->set('poids', $form_state->getValue('poids'));
Eu dou uma olhada no serviço ao usuário para:
pivate_tempstore e shared_tempstore
Mas isso funciona apenas para autentica usuários.
O que posso usar para armazenar dados? $ _SESSION? ou Drupal 8 tem um serviço para isso?
Respostas:
No Drupal 8, as variáveis da sessão podem ser acessadas fora da solicitação:
Se você deseja definir algo na sessão, pode fazer o seguinte:
Ou para recuperar uma variável de sessão:
fonte
Resposta tardia, mas vale a pena mencionar que você pode usar o tempstore privado para usuários anônimos, desde que o tempstore tenha acesso a uma sessão ativa. Para fazer isso, você precisa injetar sua classe com serviços para o armazenamento temporário, a sessão e o usuário atual, da seguinte maneira:
Então, você só precisa garantir que você inicie o gerenciador de sessões se o usuário for anônimo, antes de colocar qualquer coisa no armazenamento temporário:
Você pode achar essa abordagem preferível, pois significa que você pode usar um único sistema para armazenamento temporário, independentemente de um usuário estar conectado.
(Meus exemplos de código são extraídos mais ou menos literalmente deste excelente tutorial sobre como criar formulários de várias etapas .)
fonte
Uma sessão pode ser anônima (uid = 0). Você pode simplesmente usar $ _SESSION e o drupal cuidará disso.
Armazene dados da sessão:
Obter dados da sessão:
Atualização 1: Objeto de Sessão
Enquanto ainda houver trabalho em andamento no núcleo do D8, consulte este problema. Converter usos de $ _SESSION em sessão symfony recuperada da solicitação , você pode usar o objeto de sessão na solicitação para armazenar dados da sessão. Mas não misture, os dados armazenados com um desses métodos não estão disponíveis no outro. Veja esta resposta para mais detalhes Drupal 8 e Session Management :
Atualização 2: TempStore
O TempStore parece ser muito popular no D8. Mas é muito complicado armazenar alguns valores, como nesta pergunta. Ele se destina a grandes blocos de dados, como, por exemplo, dados de visualização ou visualizações não salvas. Aqui estão os registros oficiais de alterações:
Acessar dados da sessão através do objeto Request
API TempStore adicionada para armazenamento persistente e expirável de dados sem cache
fonte
O
$this->sessionManager->start();
não estava mais funcionando para mim por causa da última atualização. Eu mudei para$this->sessionManager->regenerate();
fonte