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.
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:
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 desession()->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étodotoArray()
en la colección antes de guardarla en la sesión, ya que el ayudantesession
solo acepta arrays de PHP simples.Finalmente, devolvemos la vista del
cliente
con la colección actualizada de clientes utilizando el métodowith()
. 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).