Tutorial de Laravel

9. Implementa los métodos CRUD

9.3 Implementa U (Update)

Vamos a implementar el método de actualización para modificar los productos guardados en la base de datos.

Para ello, abre app/Http/Controllers/ProductoController.php y actualízalo:

public function edit(Producto $producto)
{
    return view('productos.edit', compact('producto'));
}

En negrita está el código añadido. Ahora tenemos que implementar el método update():

public function update(Request $request, Producto $producto)
{
    $producto_data = $request->validate([
        'título'=>'required|max:100',
        'descripción'=>'required|max:255',
        'precio'=>'required|numeric'
    ]);

    $producto->update($producto_data);

    return redirect('/productos')->with('success', '¡Producto actualizado!');
}

En negrita está el código añadido. A continuación, hay que crear la plantilla para edit. Para ello, crea el fichero resources/views/productos/edit.blade.php:

@extends('base')
@section('main')
<div class='row'>
    <div class='col-sm-8 offset-sm-2'>
        <h1 class='display-3'>Editar</h1>

        @if ($errors->any())
        <div class='alert alert-danger'>
            <ul>
                @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
        <br />
        @endif
        <form method='post' action="{{ route('productos.update', $producto->id) }}">
            @method('PATCH')
            @csrf
            <div class='form-group'>
                <label for='título'>Título:</label>
                <input type='text' class='form-control' name='título' value='{{ $producto->título }}' />
            </div>

            <div class='form-group'>
                <label for='descripción'>Descripción:</label>
                <input type='text' class='form-control' name='descripción' value='{{ $producto->descripción }}' />
            </div>

            <div class='form-group'>
                <label for='precio'>Precio:</label>
                <input type='number' class='form-control' name='precio' value='{{ $producto->precio }}' />
            </div>

            <button type='submit' class='btn btn-primary'>Actualizar</button>
        </form>
    </div>
</div>
@endsection

Vamos a comprobar que funciona. Iniciamos el servidor de desarrollo de Laravel: php artisan serve. Abrimos el navegador y entramos en http://localhost:8000/productos.

Volver.

Curso creado por Manuel Ignacio López Quintero bajo esta licencia.