Laravel 6.*

Ahora que ya hemos aprendido cómo definir rutas, enviar y validar datos, obtener registros con Eloquent y mucho más en este curso de Primeros Pasos con Laravel 6, crear el formulario para editar registros no será muy complicado; sin embargo, hay algunos aspectos a tener en cuenta, como vamos a ver en esta lección y en la lección siguiente.

Esta lección incluye un video premium

Regístrate para ver este video y cientos de lecciones exclusivas.

Mira el código en GitHub: actual, resultado, comparación.

Formulario para editar registros

Si realizaste un ejercicio que dejé en lecciones anteriores, deberías tener una plantilla resources/views/edit-note.blade.php similar al formulario para agregar notas. Sin embargo, esta plantilla debe contar con 4 diferencias importantes que quiero resaltar debajo – he simplificado el código de la plantilla para que puedas ver mejor las partes que cambian:

<h1>Editar nota</h1>
<!-- listado de errores aqui -->
<form method="POST" action="{{ url("notas/###") }}">
    @csrf
    @method('PUT')
    <!-- ... -->
    <input type="text" name="title" value="{{ old('title', 'Titulo actual') }}">
    <!-- ... -->
    <textarea name="content">{{ old('content', 'Contenido actual') }}</textarea>
    <!-- ... -->
    <button type="submit" class="btn btn-primary">Actualizar nota</button>
</form>
  1. La acción del formulario debe contener el ID de la nota, para poder indicarle a la aplicación la nota que se debe actualizar.
  2. Debido a que los formularios de HTML solo aceptan GET o POST como método, frameworks como Laravel o Symfony utilizan un campo oculto _method para el resto de los métodos no soportado. Esto lo logramos con la directiva @method. Utilizaremos PUT para indicar que enviamos una versión actualizada de la nota.
  3. La función old acepta un segundo argumento para mostrar un valor por defecto. Los valores por defecto en nuestro formulario serán el título actual y el contenido actual de la nota.
  4. Por supuesto cambiamos el texto del título y del botón de «Nueva nota» y «Crear nota» a «Editar nota» y «Actualizar nota».

Pasar un modelo del controlador a la vista

Puesto que necesitamos todos los atributos de la nota en nuestra plantilla, vamos a enviarla desde la acción edit de NoteController, como aprendimos previamente:

<?php //...

class NoteController
{
    //...

    public function edit($id)
    {
        $note = Note::find($id);

        return view('edit-note', ['note' => $note]);
    }
}

De vuelta al formulario, ahora podemos asignar el ID, título y contenido actual de la nota dada:

<!-- ... -->
<form method="POST" action="{{ url("notas/{$note->id}") }}">
    <!-- ... -->
    <input name="title" value="{{ old('title', $note->title) }}">
    <!-- ... -->
    <textarea name="content">{{ old('content', $note->content) }}</textarea>
    <!-- ... -->
</form>

Con esto nuestro formulario ya se ve bien, sin embargo, si hacemos clic en actualizar nota veremos un error porque no hemos declarado la ruta para actualizar notas. En esto trabajaremos en la lección siguiente.

 

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Controladores en Laravel 6 Lección siguiente Actualizar registros en Laravel 6