KEVIN BRAYAN LUNA FIGUEROA
David Andrés Rincón Suárez
Juan Ricardo Cardona Álvarez
Daniel Hurtado
Jose Luis Campos Bautista
Ignacio Bogarín Alvarez
Usuario anónimo
UserJuan Fernando Ramírez Vélez
Enrique Garcia Stave
Andrés Giovanni Vanegas Castañeda
Diego Fernando Caviedes Camaho
Yordy Alejandro Jiménez Torres
Gerardo Antonio Gerónimo Vasconcelos
Gerardo Antonio Gerónimo Vasconcelos
Alfonso Navarro
Company_adminMauricio Avila Beltran
Cesar Nilton Rojas Valero
RICHARD FLORES
Diego Forero
Team PlatziJhonathan Alfonso
Lorena Pena Verdú
Juan Fernando Ramírez Vélez
Lorena Pena Verdú
Alfonso Navarro
Company_adminJimmy Buriticá Londoño
diego andres guzman
Eduardo Rahn
Braulio Alberto Bueno Pabon
Favio Sauto
luis alejandro castañeda varon
PEDRO DANIEL CORONA
Sergio Andrés Martínez Ramírez
Eduardo Rahn
Para que les aparezca el valor que desean editar en el input sería de esta forma
<input type="text" name="title" id="title" class="form-control" placeholder="Type in Title" value="{{ $report->title }}">
¡Exactamente! De nada sirve crear un módulo de edición, sin saber que es lo que el usuario tenía anteriormente... Lo único que se puede dejar sin contenido en una caja de texto, es la contraseña por el tema de la encriptación y de la seguridad...
Además hay una mejor forma para cuando se agregan validaciones en el formulario edit. Así evitas que si el usuario modifica varios campos, pero se equivocó en uno, no vuelva a recargar todo otra vez como estaba, sino con los últimos cambios que realizó y es con:
value="{{ old('title', $report->title) }}
De esta manera, el primer parámetro es el último valor ingresado por el usuario antes de validar, y en caso de no encontrar, se va al segundo parámetro donde muestra el valor que tiene ese campo en la base de datos.
Varios consejos:
1-Una manera más eficaz de colocar la ruta de un form es: action="{{ route('expenseReport.update', $Report) }}" . Así colocamos el nombre de la ruta y no la url, si actualizamos a futuro la dirección, no nos romperá al código.
2- Colocar en los campos: value="{{ old('title', $Report->title) }}", hace dos cosas: primero, cuando enviamos un parámetro y tenemos un error lo vuelve a colocar para no tener que escribirlo desde 0, y segundo cuando empezamos a editar en vez de tener el campo vacío nos pondrá el valor anterior, que editaremos
También pueden utilizar la sintaxis de blade.
{{ csrf_field() }} <!--@csfr--> {{ method_field('PUT') }} <!--@method('put')-->
Les puede servir que agreguen "value" en el <input> para obtener el valor anterior, esto es muy efectivo si tienes varios campos
<input type="text" class="form-control" id="title" name="title" value="{{ $report->title }}"
Genial :) da gusto cuando explican paso a paso y con lujo de detalle.. happy!
El controlador también puede quedar así
public function edit(ExpenseReport $ExpenseReport) { return view('expenseReport.edit', compact('ExpenseReport')) }```
Apuntes: En laravel, al momento de usar resources, se propone PUT y PATCH para cuando modificamos los mismos recursos. En un formulario no podemos especificar en el metodo, que vamos a usar un PUT o PATCH, aun asi Laravel propone un mecanismo para hacer un "Fake PUT/PATCH" funcional.
Primeramente se debe especificar en el enlace que nos llevara a la vista de edit, lo siguiente:
Consecuentemente, en el metodo edit(), se ponen lo siguiente:
Dentro del formulario de edicion, debemos poner '@method('put')', Para que de esta forma, el metodo sea traducido a PUT.
En el action del formulario, se debe especificar el dato primario que se va a enviar a update, de la siguiente manera:
Finalmente para completar la accion, colocamos en el metodo update():
return redirect('/route_especificadaDelController');
Hey muchas gracias, un aporte muy valioso!
seria muy bueno traer la data y pintarlo en el INPUT al editar seria asi:
<input type="text" class="form-control" id="title" name="title" placeholder="Type a title" value="{{ $report->title }}">
value="{{ old('title', $Report->title) }}"
Yo no uso la columna id sino por ejemplo client_id entonces mi enlace queda así:
<a href="/clients/{{ $client -> client_id }}/edit">Edit</a>
Y me manda este error:
Illuminate \ Database \ QueryException (42S22) SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select * from `clients` where `id` = 1 limit 1)
No me busca la columna client_id sino sólamente id.
Ya encontré la solución, en el modelo tuve que sobre escribir los valores por defecto con $primaryKey:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Client extends Model { protected $primaryKey = 'client_id'; }
interesante tu aporte, espero aclaren mas el tema del modelo en Laravel
Si por alguna razón se está usando una versión de laravel inferior, por ejemplo 5.0.16, que es mi caso porque tengo PHP 5.5 no funciona el helper
@method('put')
Se puede usar de forma manual de la siguiente manera
<input type="hidden" name="_method" value="PUT">
Una alternativa a la definicion del action en el form:
action="/expense_reports/{{ $report->id}}"
es la siguiente:
action="{{ route('expense_reports.update', $report) }}"
con la cual realizamos el llamado de la funcion a partir del nombre de la ruta y no por el path.
Consideren ademas que la alternativa propuesta, requiere el envio del objeto como tal y no asi unicamente el valor del atributo
Tengo una duda a la hora de guardar imagenes en Laravel, ¿se debe guardar en la carpeta public o en la carpeta storage? gracia espero contar con su ayuda.
Se debe guardar en la carpeta storage, es la definida para almacenar los archivos que se suben por el usuario.
Hola Richard, se deben guardar en public, si son imagenes que vas a tener publicar para usar por ejemplo en el layout de html.
Si son imagenes de los usuarios deben ir en storage como dice Diego.
Si al hacer todo como dice el profesor, después del paso de poner en la función update del controlador el dd(); os muestra un error de que el método POST no está soportado para esa ruta, tenéis que añadir en la vista, después de @method('put') esto: <input name="_method" type="hidden" value="PUT">
Hay mejores maneras de hacer esto. Muy regular la explicación
¿Cuáles serían? ¿Puedes dejar algún aporte explicando cómo lo harías tú mejor? Gracias! :D
Hola profe, excelente el tutorial hasta el momento.
findOrFail muy buena función, para cuando el id no es encontrado devuelve un mensaje de error.
Muy bien explicado, estoy contento con este curso de Laravel.
Hola a todos les comparto el repo de mi proyecto para este curso en git https://github.com/guzmandiegoandres12/curso_laravel_platzi
Tomando en cuenta que es un solo atributo el que se esta trabajando, creo que era un buen momento para mostrar como se traen los valores "antiguos"
value ="{{ old('title', $report->title) }}"
¿Cual es la diferencia entre el uso de PUT y PATCH?
Al usar PUT se tiene que actualizar todas las partes del objeto que se manda y cuando se usa PATCH solo se actualiza la parte específica que se manda
El método PUT solicita que la entidad adjunta se almacene bajo el URI de solicitud proporcionado
El método PATCH solicita que se aplique un conjunto de cambios descritos en la entidad de solicitud al recurso identificado por el URI de Solicitud
aca te dejo un link que lo explican mejor
Tengo el siguiente error al querer actualizar:
public function update(Request $request, Area $area) { $areaUpdate = Area::find($area); $areaUpdate->nombre = $request->get('name'); $areaUpdate->save(); return redirect( 'areas.index')->with('succes', 'Data has been successfully sent!'); }
Un posible problema podría ser que no está importanto el modelo al inicio del archivo, ya reviso si está haciendo uso de:
use App\Area; ?
Parece que $areaUpdate es una coleccion por lo que no tiene metodo save.
Yo verificaria que esta devolviendo ese $areaUpdate = Area::find($area);
DATO si lo que estas recibiendo en la funcion update es el Area y no un id no es necesario es find pues ya tienes el objeto en si. Te quedaria algo como
$area->name = $request->name; $area->save();