18. Cómo agregar y actualizar registros desde un formulario

Agregar y actualizar registros desde un formulario es una tarea común en el desarrollo de aplicaciones web con Laravel. Aprenderás a utilizar la función create y update, respectivamente, para agregar y actualizar registros en la base de datos. La función create te permite agregar un nuevo registro a una tabla utilizando los valores proporcionados por el usuario en un formulario, mientras que la función update te permite actualizar un registro existente en función de su ID utilizando los valores proporcionados por el usuario en un formulario. Aprenderás a utilizar el método fill para actualizar los valores de un registro de manera segura y a validar los datos del formulario antes de agregar o actualizar un registro. También conocerás cómo utilizar la función redirect para redirigir al usuario a una página específica después de agregar o actualizar un registro. Con estos conocimientos, podrás agregar y actualizar registros de manera segura y eficiente en tus aplicaciones web desarrolladas en Laravel.


3 comentarios

Inicia sesión para comentar

Comentarios:

  • Walter

    Walter hace 8 meses

    📌 Formulario de edición

          En la vista show.blade.php agregamos el enlace:

    <br>
    <a href="{{ route('cursos.edit', $curso) }}">Editar curso</a>

          Creamos la ruta en web.php:

    Route::get('cursos/{id}/edit', [CursoController::class, 'edit'])->name('cursos.edit');

          Ahora necesitamos crear el método edit en el controlador:

    public function edit($id) {
    	$curso = Curso::find($id);
    }

          Podemos re-escribir el método de la siguiente manera, donde Laravel entiende que quiero que ese $id sea una instancia de la clase Curso cuyo id sea lo que le estoy pasando por URL.

    public function edit(Curso $curso) {
    	return view('cursos.edit', compact('curso'));
    }

          Para evitar confusión hemos cambiado $id por $curso en el método anterior y también en la ruta: 

    Route::get('cursos/{curso}/edit', [CursoController::class, 'edit'])->name('cursos.edit');

          Lo mismo podemos hacer en la ruta show:

    Route::get('cursos/{curso}', [CursoController::class, 'show'])->name('cursos.show');

          Y también hacemos el cambio en el método show en el controlador:

    public function show(Curso $curso) {
    	return view('cursos.show', compact('curso'));
    }

          Creamos la vista edit.blade.php para cursos:

    @extends('layouts.plantilla')
    @section('title','Cursos edit')
    @section('content')
          <h1>En esta página podrás editar un curso</h1>
          <form action="{{ route('cursos.update', $curso) }}" method="POST">
                @csrf
                @method('post')
                <label>
                      Nombre:
                      <br>
                      <input type="text" name="name" value="{{ $curso->name }}">
                </label>
    
                <br>
                <label>
                      Descripción:
                      <br>
                      <textarea name="description" rows="5"> value="{{$curso->description}}"</textarea>
                </label>
    
                <br>
                <label>
                      Categoría:
                      <br>
                      <input type="text" name="categoria" value="{{ $curso->categoria }}">
                </label>
                <br>
                <button type="submit">Enviar formulario</button>
          </form>
    @endsection

          Ahora creamos una ruta donde vaya esta información cuando hagamos click en el botón, y sea esa ruta la que se encargue de actualizar el registro:

    Route::put('cursos/{curso}', [CursoController::class, 'update'])->name('cursos.update');

          Por último creamos el método update en el controlador:

          public function update(Request $request, Curso $curso) {
                $curso->name = $request->name;
                $curso->description= $request->description;
                $curso->categoria= $request->categoria;
                $curso->save();
                return redirect()->route('cursos.show', $cursos);
          }

     

  • Walter

    Walter hace 8 meses

    📌 Formulario de creación

          En la vista create.blade.php de cursos agregamos:

          <form action="">
                <label>
                      Nombre:
                      <br>
                      <input type="text" name="name">
                </label>
    
                <br>
                <label>
                      Descripción:
                      <br>
                      <textarea name="description" rows="5"></textarea>
                </label>
    
                <br>
                <label>
                      Categoría:
                      <br>
                      <input type="text" name="categoria">
                </label>
                <br>
                <button type="submit">Enviar formulario</button>
          </form>

          Creamos la ruta en web.php que recibirá los datos del formulario:

    Route::post('cursos', [CursoController::class, 'store'])->name('cursos.store');

          Vamos al controlador a crear el método store:

    public function store(Request $request) {
    	$curso = new Curso();
    	$curso->name = $request->name;
    	$curso->description = $request->description;
    	$curso->categoria = $request->categoria;
    	$curso->save();
    	
    	return redirect()->route('cursos.show', $curso->id); //podemos pasar solo $curso
    }

          Agregamos la ruta, el método y token al formulario:

          <form action="{{ route('cursos.store') }}" method="POST">
                @csrf

     

  • Ricky Brito T

    Ricky Brito T hace 11 meses

    En controladores CursoController los metodos de destroy ,update ,edit y show como parametro es $curso porque seria como el $id .