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.
5 comentarios
Inicia sesión para comentar
Comentarios:
-
Buenardo Orozco hace 10 meses
tengo una duda es que por defecto el controlador me exijje el __invoke
como ago para que no pase esto
-
Buenardo Orozco hace 10 meses
ya encontre la solucion la dejo aca por si le pasa a algien mas
al momento de declarar las rutas
route::get('curso',controller,'index');
esa manera esta mal no da un error de sintaxis pero tampoco se ejecuta de la forma ue deseo solo se va por defecto al metodo __inboke
bueno la solucion fue agregar [] tal como se mencionan en el curso
-
-
Jesus Parra hace 1 año
Excelente
-
Marco Cordero hace 1 año
Tengo una duda que no se explica muy bien en el video. Cuando creamos el a:
<a href="{{route('courses.edit', $course)}}">Editar Curso</a>
y su respectiva ruta:
Route::get('courses/{id}/edit', [CourseController::class, 'edit'])->name('courses.edit');
Como sabe Laravel que la url que quiero es courses/51/edit???
Cuando le cambie el {id} por {name}, me siguio dando courses/51/edit.
-
Victor Arana Flores hace 1 año
¿Cambias el id por name?
Laravel busca por defecto un registro utilizando el id. Si quieres usar otros campos tienes que cambiarlo en el modelo, y eso explico en la parte en que hablamos sobre url amigables. -
Marco Cordero hace 1 año
Gracias Victor, justo hoy lo vi en el video de URL's. Gracias por tus videos!!
-
-
Walter hace 2 años
? 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); }
-
Gonzalo Chable hace 4 meses
En edit.blade.php debe ser @method('put')
-
-
Walter hace 2 años
? 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