[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Marcos Rodriguez
Criador Marcos Rodriguez 24/05/2022

Oi, boa tarde, carlos. Desculpa mas estou fazendo este projeito no Lavarel 8, so fiquei sem solucao aqui em esta etapa, no controller Cart, no metodo Add() fazo tudo o indicado e fazo 

dd($request->session()->get('cart'));

apos dar o

dd($request->session()->put('cart', $cart));

e mostra o dd perfeito com os items no carrino mas apos dar o redirect e carregar a view do carrinho, simplemente some a informacao do carrinho ele mantem o nome da session mas ele volta vaziu. Ja procurei de tudo mas nao estou dando certo. Se puder dar um help agradeceria

Manager Carlos Ferreira 24/05/2022

Olá, Marcos!
Tudo bem?

Você está armazenando as sessões como, em arquivo (file), usando o redis?

Cria dessa forma para testar, outro aluno teve um problema semelhante e assim deu certo:
session(['cart' => $cart]);

E recuperar assim:
$cart = session('cart');

Carlos Ferreira
Criador Marcos Rodriguez 24/05/2022

Opa, boa noite, sim com o Driver de file, e ja tentei de esa forma que vc indicou e nada, me corrijo o Laravel e o 9, Agora eu estou usando asim...

 

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Product;
use App\Models\Cart;
use Illuminate\Support\Facades\Session;

class CartController extends Controller
{
    public function index()
    {

        //$request = request();
        $cart = Session::get('shopping-cart');
        //$cart = $request->session()->get('cart');
        //dd($cart);

        return view('store.cart.index');
    }

    public function add(Request $request, $id)
    {

        $product = Product::find($id);

        if(!$product)
        {
            return redirect()->route('home');
        }

        $cart = new Cart;
        $cart->add($product);

        Session::put('shopping-cart', $cart);
        Session::save();
        //$request->session()->put('cart',$cart);

        //$request->session()->put('cart',$cart);

        //dd($request->session()->get('cart'));

        return redirect()->route('cart');

    }
}
Marcos Rodriguez
Manager Carlos Ferreira 24/05/2022

Está rodando sua aplicação como? Docker?

--

Faz um teste, cria essas duas rotas:
Route::get('teste1', function () {
    $cart = 'valor na sessão';
    session(['cart' => $cart]);

    return redirect()->route('teste2');
});

Route::get('teste2', function () {
    dd(session('cart'));
})->name('teste2');

Após criar essas duas rotas, acessa a primeira URL e me diga o resultado.

Carlos Ferreira
Criador Marcos Rodriguez 24/05/2022

Opa, estou rodando a aplicacao com wamp server, pra poder habilitar mysql, e o laravel via php artisan serve



resultado da primeira URL

Marcos Rodriguez
Manager Carlos Ferreira 24/05/2022

Está armazenando a sessão.

O problema está no código mesmo, tem ele no GitHub?

Carlos Ferreira
Criador Marcos Rodriguez 24/05/2022

Sim,

https://github.com/MarkTecnicoDeveloper/ETILaravelPaypal

Aprobeitando tem problema algum se os projeitos do curso eu pegar e fazer com Laravel 9 e TailwindCss, e colocar no meu github como publico, caso huber, so me avisar e eu mudo como privado.

Marcos Rodriguez
Criador Marcos Rodriguez 24/05/2022

Boa tarde, Carlos, Desculpa incomodar novamente, so que fiquei meio trabado en este curso, fiz varios testes e tudo o que foi string ele mantem na sessao, mas o model ele nao mantem. E o deu certo o Github do projeito?

Marcos Rodriguez
Manager Carlos Ferreira 24/05/2022

Acessei aqui o seu GitHub

Deixa a sua classe de carrinho enxuta, assim:
class Cart
{
    private array $items = [];

    public function add(Product $product)
    {
        $this->items[$product->id] = [
            'item'  => $product,
            'qtd'   => 1,
        ];
    }

    public function getItems(): array
    {
        return $this->items;
    }
}

E agora tente novamente armazenar o objeto dessa classe na sessão.

Carlos Ferreira
Criador Marcos Rodriguez 24/05/2022

Sim, agora deu tudo certo, muito obrigado, entao so pra entender, o que acontece seria basicamente que como extende da clase modelos e muita informacao pra o session? e ao ser so uma clase com unica responsabilidade consege salvar corretamente?

Ou se huber alguma explicacao diferente e puder me explicar agradeco.

E sobre o git posso deixar o projeito publico pra meu porfolio, com o Laravel 9 e o TailwindCSS?

Marcos Rodriguez
Manager Carlos Ferreira 24/05/2022

Com essa classe cart ela tem uma papel bem simples, quanto mais enxuta ela for, melhor.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!