es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Laravel 8: ¿Cómo almacenar los datos de un formulario dentro de una colección?

Soy principiante en el framework Laravel y estoy teniendo problemas para almacenar los datos que se ingresaron en un formulario en una colección.

Este es el formulario donde se obtienen los datos

<form action="{{ url('/add_client') }}" method="POST">
    @csrf
    <table>
        <tr>
            <td><input type="text" placeholder="Agregar cliente" name="client" required=""></td>
            <td><input type="submit" value="+"></td>
        </tr>
    </table>
</form>

Aquí es donde se muestra la salida de los datos

<table>
    <tr><td>Clientes agregados</td></tr>
    <tr><td>
    <div class="border border-dark" style="width: 500px; height: 100px;">
        @isset($clients)
            @foreach ($clients as $client)
                <div class="bg-info" style="display: inline-block; padding: 2px;">{{ $client }}</div>
            @endforeach
        @endisset
    </div>
    </td></tr>
</table>

Aquí es donde se agrega una nueva colección, insertando los datos que se leyeron del formulario y volviendo a la vista ‘/cliente’, que es la página donde se leen los datos y se mostrarán.

public function addClient (Request $req, Collection $clients) {
    $clients->push($req->input('client'));
    return view('clientes')->with('clients', $clients);
}

Esta es la página de enrutamiento (la función fetchData no está relacionada)

Route::get('/cliente', [ClienteControlador::class, 'fetchData']);
Route::post('/agregar_cliente', [ClienteControlador::class, 'agregarCliente']);

Me gustaría que la variable $clients creara una nueva “entrada” cada vez que se envíen datos, y me gustaría poder acceder a los datos que se enviarón antes e insertaron en la colección. No quiero almacenarlos en una base de datos.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear una nueva entrada cada vez que se envía información y almacenarla en una colección, puedes usar el ayudante session en Laravel para almacenar la colección como un array en la sesión. Luego, puedes recuperar la colección existente de la sesión y agregar los nuevos datos a ella.

    Aquí tienes un ejemplo de implementación:

    public function addClient(Request $request)
    {
        // Obtén la colección de clientes existente de la sesión
        $clients = collect(session()->get('clients', []));
    
        // Agrega el nuevo cliente a la colección
        $clients->push($request->input('client'));
    
        // Guarda la colección actualizada de vuelta en la sesión
        session()->put('clients', $clients->toArray());
    
        // Devuelve la vista del cliente con la colección actualizada de clientes
        return view('client')->with('clients', $clients);
    }
    

    En esta implementación, primero recuperamos la colección de clientes existente de la sesión usando la función auxiliar session(). El segundo argumento de session()->get() es un valor por defecto a utilizar si no se encuentra la clave 'clients' en la sesión. En este caso, usamos un array vacío como valor por defecto, lo que crea una nueva colección de clientes si aún no existe.

    A continuación, agregamos el nuevo cliente a la colección utilizando el método push(). Este método agrega el elemento al final de la colección y devuelve la instancia actualizada de la colección.

    Después de agregar el nuevo cliente a la colección, guardamos la colección actualizada de vuelta en la sesión utilizando el método session()->put(). Este método toma dos argumentos: la clave a utilizar en la sesión (en este caso, usamos 'clients') y el valor a guardar. Llamamos al método toArray() en la colección antes de guardarla en la sesión, ya que el ayudante session solo acepta arrays de PHP simples.

    Finalmente, devolvemos la vista del cliente con la colección actualizada de clientes utilizando el método with(). Este método agrega una variable a los datos de la vista, que se puede acceder en la vista utilizando la clave proporcionada ('clients' en este caso).

Comments are closed.