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 }}">
Introducción
Intro y caracteristicas de Laravel
Fundamentos
Instalación de Laravel
Primer ruta en laravel
Cómo funciona Blade
Controladores en Laravel
Request
Configuración de laravel
Bases de Datos
Cómo funcionan las Migraciones de DB
Migraciones en Artisan
Modelos con Eloquent
Trabajando con un Modelo
Operaciones CRUD
Controladores y recursos
Blade layout
Form para agregar reportes
CSRF
Fake PUT/PATCH
Borrando reportes
Validaciones
Relaciones en bases de datos
Creamos la vista de reportes
Relaciones con eloquent
Trabajando con relaciones
Emails
Acción para enviar un mail
Enviando emails
Autenticación
Login
Cierre
Cierre
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
En Laravel cuando usamos recursos nos pone Put y Patch como una opción para modificar nuestros recursos. El problema de esto es que en un form no se puede especificar directamente que queremos hacer un Put o un Patch y por esto Laravel nos ofrece un mecanismo para hacer ”Fake PUT/PATCH” y podamos recibir y procesar los datos.
Para que Laravel acepte el Put o Patch es necesario poner dentro del form de manera auxiliar @method(‘tipo de método usado’) y así aunque el form tenga un POST como método, realmente será traducido al que especifiquemos dentro del auxiliar.
Aportes 31
Preguntas 5
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 }}">
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() }} <[email protected]>
{{ method_field('PUT') }} <[email protected]('put')-->
El controlador también puede quedar así
public function edit(ExpenseReport $ExpenseReport)
{
return view('expenseReport.edit', compact('ExpenseReport'))
}```
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 }}"
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’);
Genial 😃 da gusto cuando explican paso a paso y con lujo de detalle… happy!
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 }}">
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.
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
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) }}"
Que bueno aprender de personas experimentados 😄
esta clase es arte ❤️
tengo un error en el codigo alguien me puede ayudar
el cogigo que tengo es el siguiente este es el controlador
public function edit($id)
{
$departament=departamento::find($id);
return view('departamentos.editar',COMPACT('departament'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$departament = departamento::find('$id');
$departament->Nombre = $request->get('nom');
$departament->Descripcion= $request->get('des');
$departament->save();
return redirect('/departamentos');
}
esta es la vista
<form class="form-inline"action="/departamentos/{{$departament->Id_departamentos}}" method="post">
@csrf
@method('PUT');
<div class="form-group col-md-6">
<label for="">Nombre</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Nombre" name="nom" value="{{$departament->Nombre}}">
</div>
</div>
<div class="form-group col-md-6">
<label for="">Descripcion</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Descripción" name="des" value="{{$departament->Descripcion}}">
</div>
</div>
<div class="col-md-10">
<button type="submit" class="btn btn-primary">Guardar</button>
</div>
</form>
y esta es la ruta
Route::resource(’/departamentos’,‘departamentocontroller’);
YO LE PUSE <h1>Edit Report ‘{{$report->title}}’</h1>
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
.
Hola chicos, estoy creando mi primero proyecto laravel, despues de haber cursado este cuerso con este gran maestro, y hay cosa que he cambiado que no viene en el curso por cuestiones personales y uno de ellos es el id de mi tabla, puesto que no lo deje con id, si no que lo use como id_client por cuestiones propias de identificación, ok ahi no para. Pues me tope con un error siguiente:
Error, al editar
Illuminate \ Database \ QueryException (42S22)
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gpem_customers.id' in 'where clause' (SQL: select * from `gpem_customers` where `gpem_customers`.`id` = 1 limit 1)
Esto pasa y en mi controlador tengo esto:
Controlador
/**
* Show the form for editing the specified resource.
*
*/
public function edit($id_client)
{
$cliente = GpemCustomer::find( $id_client );
return view('clientes.edit', [
'cliente' => $cliente
]);
}
Esto por que no se, y estuve buscando en la red, y me tope que a veces por regla debemos respetar el key primary como tal ya que laravel dice buscar un id que en tu tabla no esta, no se por que, en fin la solucion fue que en mi modelo, deberia decirle a laravel cual es mi key primary:
Modelo Eloquent
namespace App;
use Illuminate\Database\Eloquent\Model;
class GpemCustomer extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
//Indico mi tabla
protected $table = 'gpem_customers';
//Indico cual va hacer mi key primary por cuestiones del controlador edit
protected $primaryKey = 'id_client';
}
Y asi fue que me permitio avanzar, la vdd sigo sin entender pero algo me dice que asi es el motor de laravel y que sigue un patron y que si no lo respeto sale este error, estare mal???
Que me pueden decir amigos.
Alguien me puede ayudar con este error porfavor:
 porque el $request no es $request->post() en vez de $request->get(), si le estamos mandando un método post a nuestro formulario, los valores deberían ir en post no?
Podemos agilizar el desarrollo de la creacion y la modificacion de registros añadiendo una funcion de “save” con el siguiente codigo
privatefunctionsave(ExpenseReport $report, Request $request)
{
$report->title = $request->get('title');
$report->save();
return redirect(route('expense_reports.index'));
}
Y sustituir el código que se encarga del procesado y almacenamiento por dicha funcion
Tanto en Store
public function store(Request $request)
{
$report = new ExpenseReport();
$this->save($report, $request);
}
Como enUpdate
public function update(Request $request, $id)
{
$report = ExpenseReport::find($id);
$this->save($report, $request);
}
De esta manera tendremos un solo sitio al que acudir en caso de tener que modificar el código tanto para update como para create
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">
Por defecto, el resto de métodos (PUT, PATCH, DELETE, etc.) no están soportados de forma nativa por los navegadores, ellos no entienden qué es eso, lo que hacen frameworks como Laravel es ampliar el arsenal de métodos, pero para el navegador solo existe GET y POST, es por eso que en el formulario HTML enviamos a través de POST, y usamos el helper @method
Otra cosa, en el título de “Editando registro” en lugar de poner el id, sería mejor poner el nombre, a final de cuentas el id es algo que solo va a manejar nuestra aplicación, pero como buenos programadores, queremos ser lo más específicos con nuestros usuarios, es por eso que imprimir: “Editando registro vacaciones” es mucho mejor que imprimir “Editando registro 1”😄
Función findOrFail, para cuando el id no es encontrado devuelve un mensaje de error.
Para los que utilizan Laravel versiones 5.5, el @method(‘put’) lo imprime como texto, para evitar este error podemos utilizar {{method_field(‘PUT’)}} sustituyendo a ese @method(‘put’)
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.