Remove an item from an array in Laravel's session

2

I have an array in a session and need to remove an item only. I put

session()->forget('cart') 

It removes all items. What is the correct way to remove only one?

Controller

namespace App\Http\Controllers;

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

class ProductsController extends Controller
{

public function index()
{
    return view('product.index');
}

public function store(Request $request)
{
    $product = $request->all();
    session()->push('cart', $product);
    return redirect()->back();
}

}

View:

<div class="container">
<div class="row">
    <div class="col-md-12">
        <div class="panel panel-default">
            <div class="panel-heading">Produtos</div>
            <div class="panel-body">
                <table class="table m-0" id="products-table">
                    <thead>
                        <tr>
                            <th>Produto</th>
                            <th>Alterar</th>
                            <th>Excluir</th>
                        </tr>
                    </thead>
                    <tbody class="row">
                        @if(session()->get('cart'))
                            @foreach(session()->get('cart') as $key => $product)  
                                <tr>
                                    <td>{{ $product['name'] }}</td>  
                                    <td><a href="#">Alterar</a></td>    
                                    <td><a href="{{ session()->forget('key') }}">Excluir</a></td>                         
                                </tr>
                            @endforeach
                        @endif
                    </tbody>
                    <tfoot>
                        <tr>
                            <td colspan="5" style="text-align: left;">
                                <button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">Incluir</button>
                            </td>
                        </tr>
                    </tfoot>
                </table>    
            </div>
        </div>
    </div>
</div>

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title" id="myModalLabel">Modal title</h4>
        </div>
        <form method="post" action="{{ route('product.store') }}">
        {{ csrf_field() }}
        <div class="modal-body">
            <input type="text" class="form-control" name="name">
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
            <button type="submit" class="btn btn-primary">Salvar</button>
        </div>
        </form>
    </div>
</div>

    
asked by anonymous 31.08.2017 / 16:08

2 answers

2

First recover the cart , exclude array from the key and then destroy and rebuild cart .

Method:

public function exclusao($chave)
{
    $carts = session()->get('cart');
    unset($carts[$chave]);
    session()->forget('cart');
    session()->put('cart', $carts);
    return redirect()->back();
}

Route

Route::get('product/exclusao/{chave}', 'ProductController@exclusao');

Html

<td>
    <a href="/product/exclusao/{{ $key }}">Excluir</a>
</td>

References:

31.08.2017 / 18:03
-2
unset(session()->get('cart')['INDICE_A_SER_REMOVIDO'])

As you are looping in each iteration then in foreach:

foreach(session()->get('cart') as $key => $product)

... href="{{ unset(session()->get('cart')[$key]) }}">Excluir<...
    
31.08.2017 / 16:56