Salvando Array de Sessões

8 views
Skip to first unread message

ebiagi

unread,
Mar 20, 2020, 8:55:25 AM3/20/20
to CakePHP Tuga

Amigos,

To adicionando registros via formulário na sessão e tô tendo algumas dúvidas pra montar um array com as informações. Quando o gravo o primeiro vai tudo bem, no segundo ele substitui. Queria manter! Alguém pra dar uma força 


tela 01.png
tela 02.png

Jefferson Simão Gonçalves

unread,
Mar 20, 2020, 9:04:04 AM3/20/20
to cakep...@googlegroups.com
Bom dia!

Tem manipular a session lendo se existe alguma informação para reescrever os valores com os novos índices do array.


https://stackoverflow.com/a/6364007


Em sex., 20 de mar. de 2020 às 09:55, ebiagi <edria...@gmail.com> escreveu:

Amigos,

To adicionando registros via formulário na sessão e tô tendo algumas dúvidas pra montar um array com as informações. Quando o gravo o primeiro vai tudo bem, no segundo ele substitui. Queria manter! Alguém pra dar uma força 


--
--
CakePHP Tuga (cakephp-pt)
 
Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org
 
Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT
---
Recebeu esta mensagem porque subscreveu ao grupo "CakePHP Tuga" do Grupos do Google.
Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakephp-pt+...@googlegroups.com.
Para ver este debate na Web, visite https://groups.google.com/d/msgid/cakephp-pt/9db0e0e1-cf07-439d-8727-20217b5d5c4f%40googlegroups.com.

ebiagi

unread,
Mar 25, 2020, 1:04:29 PM3/25/20
to CakePHP Tuga
Valeu Jefferson, era dessa forma que queria. Aproveitando... Eu consigo montar o array com as informações do pedido: quantidade e produto_id.

Como consigo por exemplo incluir as informações da tabela de produtos? Que é a tabela relacionada.

Consigo acessar $carrinho->quantidade.
Queria tentar $carinho->produtos->nome_produto.

Meu método pra criar a sessão:

public function add()
{
$pedido = $this->Pedidos->newEntity();
if ($this->request->is(‘post’)) {
$produtoTabela = TableRegistry::getTableLocator()->get(‘Produtos’);
$produtos = $produtoTabela->newEntity();
$request = $this->Requests->patchEntity($request, $this->request->getData());
$session = $this->request->session();
$carrinho = $session->read(‘cart’);
$carrinho[] = $carrinho;
$session->write(‘carrinho’, $carrinho);
$this->Flash->success(__(‘Pedido Adicionado’));
return $this->redirect([‘action’ => ‘index’]);
}
$produto = $this->Pedidos->Produtos->find(‘list’, [‘limit’ => 200]);
$users = $this->Produtos->Usuarios->find(‘list’, [‘limit’ => 200]);
$this->set(compact(‘pedido’, ‘produtos’, ‘usuarios’));
}

Jefferson Simão Gonçalves

unread,
Mar 25, 2020, 7:04:08 PM3/25/20
to cakep...@googlegroups.com
Você pode utilizar dessa forma.

$produto_id  = $this->request->getData('produto_id'); 
$quantidade = $this->request->getData('quantidade');  

$carrinho = $session->read(‘cart’);
$carrinho[] = [
'produto_id' => $produto_id,
'quantidade' => $quantidade
];

$session->write(‘carrinho’, $carrinho);  
--
--
CakePHP Tuga (cakephp-pt)

Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org

Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT
---
Recebeu esta mensagem porque está inscrito no grupo "CakePHP Tuga" dos Grupos do Google.


Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakephp-pt+...@googlegroups.com.

ebiagi

unread,
Mar 26, 2020, 12:47:11 PM3/26/20
to CakePHP Tuga
Valeu Jefferson,
ainda consegui adicionar as informações do usuário que cadastrou o produto adicionando:

$pedido->produto = $this->Pedidos->Produtos->get($pedido->produto_id, ['contain' => ['Usuarios']]);

Obrigado pela força!
Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakep...@googlegroups.com.

Rafael Queiroz

unread,
Mar 26, 2020, 2:25:51 PM3/26/20
to cakep...@googlegroups.com
Fala ebiagi,

Desculpa a demora, acabei perdendo a thread. Então acho interessante tu criar um Component para o Carrinho, e re-utlizar o SessionComponent nele.
Teu código vai ficar mais legivel, e em qualquer controller/action tu vai puder acessar os items do carrinho, total, etc.


Também já escrevi um componente anos atrás, que segue essa proposta de criar um carrinho na sessão:

https://github.com/rafaelqueiroz/cakephp-cart

Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakephp-pt+...@googlegroups.com.
Para ver este debate na Web, visite https://groups.google.com/d/msgid/cakephp-pt/020f7bb8-5bca-479e-92fd-6d252d5083dc%40googlegroups.com.


--
Best Regards,

Rafael F. Queiroz

ebiagi

unread,
Apr 27, 2020, 7:58:39 PM4/27/20
to CakePHP Tuga
Fale Rafael,
obrigado pelo retorno.
Consegui montar desta forma:

public function add()
    {

        $pedido = $this->Pedidos->newEntity();

        if ($this->request->is('post')) {

            $pedido = $this->Pedidos->patchEntity($pedido, $this->request->getData());
            $pedido->produto = $this->Pedidos->Produtos->get($pedido->produto_id, ['contain' => ['Usuarios']]);
            $session = $this->request->session();
            $carrinho = $session->read('carrinho');
            $carrinho[] = $pedido;

            if(count($carrinho) <= 3){
                $session->write('carrinho', $carrinho);
                $this->Flash->success(__('Pedido Adicionado'));
                return $this->redirect(['action' => 'index']);
            }else{

                return $this->redirect('/usuarios/login');
                $this->Flash->success(__('Continue sua lista. Cadastre-se e aproveite as vantagens!'));
            }

            $produtos = $this->Pedidos->Produtos->find('list', ['limit' => 200]);
            $usuarios = $this->Produtos->Usuarios->find('list', ['limit' => 200]);
            $this->set(compact('pedido', 'produtos', 'usuarios'));
        }
    }

Reply all
Reply to author
Forward
0 new messages