Entender Laravel

1

Novedades y herramientas actualizadas en Laravel

2

Desarrollo web con Laravel: proyectos y funcionalidades clave

3

Curso de Laravel 6: Configuración del Entorno de Desarrollo

4

Instalación y configuración de Laravel paso a paso

5

CRUD en Laravel: Crear, Leer, Actualizar y Eliminar Usuarios

6

"Creación de Controladores y Vistas en Laravel"

7

Creación de Formularios y Validación en Laravel con Bootstrap

Comprender los Fundamentos de Laravel

8

Rutas y Controladores en Laravel: Fundamentos Esenciales

9

Protección de Rutas y Controladores en Laravel con Middleware

10

Validación de Formularios en Laravel: Buenas Prácticas y Ejemplos

11

Sistema de Plantillas Blade en Laravel: Creación y Uso Eficiente

12

Implementación de Sistema de Autenticación en Laravel con Bootstrap

Aprender sobre Eloquent ORM

13

Manejo de Bases de Datos con Eloquent en Laravel

14

Relaciones de Tablas y Manipulación de Datos en Laravel

15

Manipulación de Colecciones y Serialización de Datos en Laravel

16

Manipulación de Datos en Bases de Datos con PHP

Crear PlatziPress

17

Creación de un Blog con Sistema de Autenticación y Slugs

18

Configuración de Migraciones, Factories y Seeders en Laravel

19

Configuración de Rutas y Controladores en Laravel para Listado de Posts

20

Configuración Visual y Paginación en Laravel y Vue.js

21

Gestión de Artículos en Laravel: Rutas, Controladores y Vistas

22

Creación de Formularios en PHP con HTML y Bootstrap

23

Validación y Guardado de Datos en Laravel

24

Formulario de Edición de Artículos con Laravel

25

Gestión de Formularios y Archivos en Laravel

26

Integración de Imágenes y Contenido Multimedia en Proyectos Web

Construir Proyecto Final: API con TDD (Intermedio)

27

Testing y Pruebas Funcionales en Laravel: Proyecto Intermedio

28

Pruebas de Software: Ciclo Rojo, Verde y Refactorización

29

Configuración de Proyectos en Laravel: Controladores y Pruebas

30

Desarrollo Guiado por Pruebas en Laravel: Configuración y Ejecución

31

Refactorización y Validación de Código en Pruebas Unitarias

32

Pruebas y Configuración de Controladores en Laravel

33

Actualización de Datos en Controladores: Método y Pruebas

34

Pruebas Unitarias para Método de Eliminación en Bases de Datos

35

Creación y Prueba de Métodos Index en PHP

36

Protección de APIs con Autenticación Token en Laravel

37

Desarrollo de Formularios con Blade y Verbalización de Datos

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a Laravel 6

Curso de Introducción a Laravel 6

Profesor Italo Morales F

Profesor Italo Morales F

Gestión de Formularios y Archivos en Laravel

25/37
Recursos

¿Cómo darle vida al formulario con Laravel?

En la etapa de aprendizaje de Laravel, es crucial entender el ciclo completo de desarrollo que involucra la creación de rutas, controladores y vistas. Laravel ofrece una flexibilidad impresionante al facilitar la creación de formularios mediante el uso de plantillas replicables. Sin embargo, para aprovechar estas ventajas, es necesario comprender meticulosamente cada línea de código. Este proceso consiste en:

  • Crear una ruta.
  • Configurar un controlador.
  • Diseñar una vista.

Con estos pasos, se logra agregar funcionalidad al formulario de creación o modificación de registros y eliminar de manera eficiente. ¿Y qué tal si analizamos algunos ejemplos prácticos de ello?

¿Cómo eliminar un registro con éxito?

Al implementar la función de eliminación en Laravel, se debe considerar tanto el registro en la base de datos como los archivos asociados que estén almacenados, como imágenes. Una vez eliminados, se debe retornar al usuario un mensaje en la sesión informando del éxito de la acción.

Vamos con un ejemplo de código para la eliminación:

public function destroy($id) {
    // Encuentra el registro por ID
    $post = Post::findOrFail($id);

    // Elimina el archivo de imagen asociado
    Storage::delete('public/'.$post->image);

    // Elimina el registro
    $post->delete();

    // Redirecciona con mensaje de éxito
    return redirect()->route('posts.index')->with('status', 'Eliminado con éxito');
}

¿Cómo actualizar un registro y manejar imágenes?

El manejo de archivos es crucial al actualizar registros que contienen imágenes. Cuando se recibe una nueva imagen, programa el sistema para eliminar la antigua antes de almacenar la nueva. Similar al proceso de eliminación, el usuario es informado del éxito de la actualización.

Ejemplo de implementación de actualización:

public function update(Request $request, $id) {
    $post = Post::findOrFail($id);

    // Validaciones de título y contenido
    $validatedData = $request->validate([
        'title' => 'required|max:255',
        'body' => 'required',
    ]);

    // Manejo de imágenes
    if ($request->hasFile('image')) {
        // Elimina la imagen anterior
        Storage::delete('public/'.$post->image);

        // Guarda nueva imagen
        $path = $request->file('image')->store('public/posts');

        // Actualiza la ruta de la imagen en la base de datos
        $post->image = basename($path);
    }

    // Guardar cambios en el registro
    $post->update($validatedData);

    // Redirecciona con mensaje de éxito
    return redirect()->route('posts.index')->with('status', 'Actualizado con éxito');
}

¿Por qué es importante el manejo de imágenes en Laravel?

El almacenamiento eficaz y administración de imágenes en Laravel garantiza que no se acumulen archivos innecesarios en el servidor. Cada vez que un archivo es actualizado o un registro es eliminado, el sistema debe gestionar adecuadamente estos cambios para liberar espacio. Esto no solo optimiza el rendimiento del servidor sino que además, evita posibles confusiones al mantener exclusivamente los archivos actualmente en uso.

El manejo de imágenes no es complejo, pero sí requiere de un enfoque minucioso. Al trabajar con la clase Storage, se asegura que incluso si se cambia de configuración de almacenamiento en el futuro, como pasar de almacenamiento local a servicios en la nube, el cambio será sencillo y sin fricciones.

Recomendaciones prácticas

Antes de implementar soluciones más complejas, asegúrate de dominar los conceptos básicos de Laravel. Sumérgete en la documentación oficial y explora ejemplos prácticos. Al reforzar tus conocimientos sobre rutas, controladores y vistas, podrás crear aplicaciones robustas y confiables.

Finalmente, recuerda que cada avance en tu aprendizaje abre nuevas oportunidades para construir aplicaciones más complejas y dinámicas. ¡La práctica constante es tu mejor aliada! Sigue adelante y no dudes en experimentar con diferentes configuraciones y optimizaciones que Laravel tiene para ofrecer.

Aportes 19

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Nota:
En mi caso al editar la imagen, me creaba la nueva imagen, la editaba al post, pero no la borraba.

Entonces tuve que hacer lo que muestro en el fragmento del codigo.

Saludos.

// edito solo esos campos si no viene file
$post->update([
            'title' => $request->title,
            'body' => $request->body,
            'iframe' => $request->iframe
        ]);
// si viene con file
if ($request->file('image')) {
            Storage::disk('public')->delete($post->image);
            $post->image = $request->file('image')->store('posts', 'public');
            $post->save();
        }

Actualizando nuestros posts


Para eliminar una imagen necesitamos trabajar con esta clase:

use Illuminate\Support\Facades\Storage;

Y para eliminar la imagen pondremos:

Storage::disk('public')->delete($post->image);

La lógica de esta sentencia es que dentro del almacenamiento busque la carpeta public y ahí vas a eliminar la ruta que le de los parámetros, en este caso es $post->image.

Una consulta compañeros quienes han hecho este ejemplo de clase han visto o notado que aunque actualizamos podemos casi cambiar todos por los campos por lo que seria necesarios saber que campos puedo cambiar en reralidad, ya que por ejemplo si cambio el titulo el slug deberia modificarse y no lo hace.

Si tienen error para actualizar la imagen, asi lo solucione pasando el post como string, para gente con laravel 8 y 9 😃

public function destroy(Post $post)
    {
        Storage::disk("public")->delete((string) $post->image);
        $post->delete();

        return back()->with('status', 'Eliminado con éxito');
    }
public function update(PostRequest $request, Post $post)
    {
        $post->update($request->all());

        if($request->file('file')){

            // eliminar la imagen
            Storage::disk("public")->delete((string) $post->image);

            $post->image = $request->file('file')->store('posts', 'public');
            $post->save();
        }

        return back()->with('status', 'Actualizado con éxito');
    }

Mi lógica me dice que antes de tratar de eliminar un archivo, primero debo de comprobar si existe. Pero durante el ejercicio siempre se manda a eliminar, así el campo del nombre de archivo este vacío. Lo increíble es que funciona.

Interesante, hasta ahora he seguido todo el curso y en mi caso todo va perfecto!

Hola tengo un problema cuando doy clic en actualizar solo recargar la pagina

También pueden ir a conf y agregar otra carpeta con visibilidad publica si quieren ir ordenando las fotos en carpetas por proyecto:

Archivo: config->filesystems.php

    'posts' => [
        'driver' => 'local',
        'root' => storage_path('app/posts'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

Estoy trabajando con php artisan serve. Cuando hago click en ‘eliminar’ salta el cartel de confirmación. Cuando doy ok no pasa nada, no se modifica nada. y en la consola aparece el siguiente msj:
Closed without sending a request; it was probably just an unused speculative preconnection

Alguna idea de lo que pueda estar pasando? gracias.

Método destroy cuando image es null produce excepción en Laravel. Fix:

Borrar solamente si $post->image no es null.

   public function destroy(Post $post)
    {
        if ($post->image != null){
            Storage::disk('public')->delete($post->image);
        }
        $post->delete();
        return back()->with('status', 'eliminado con éxito');
    }

Si estas en Laravel 9 y recibes este error al actualizar y eliminar un post que no tiene imagen (null en la base de datos):

League\Flysystem\Filesystem::delete(): Argument #1 ($location) must be of type string, null given

Modifica tu código asi:

if ($post->image) {
	Storage::disk('public')->delete($post->image);
}

En laravel 8, en el área de salvar y actualizar, cambien el $request->all(), por $request->validated(), para no tener problemas con la Base de Datos

para los q hicieron mostrando la imagen en el formulario editar y no les deja eliminar un post q no tiene imagen

public function destroy(Post $post)
    {
      
        if($post->image==""){
            $post->delete();
        }else{
            Storage::disk('public')->delete($post->image);
            $post->delete();//eliminamos post de la bd
        }

        return back()->with('status','Eliminado con exito');
    }
    public function update(PostRequest $request, Post $post)
    {
        $post->update($request->all());

        // imagen
        if($request->file('file'))
        {
            //eliminar imagen
            Storage::disk('public')->delete($post->image);

            $post->image = $request->file('file')->store('posts','public');
            $post->save();
        }

        return back()->with('status','Actualizado con éxito');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function destroy(Post $post)
    {
        Storage::disk('public')->delete($post->image);
        $post->delete();

        return back()->with('status','Eliminado Con éxito');
    }

Problema: No se actualiza el slug en DB
Encontré la solución. Tenía el mismo problema. A Italo si se le actualiza pero no lo explica.

Ejecuta el siguiente comando:

php artisan vendor:publish --provider="Cviebrock\EloquentSluggable\ServiceProvider"

Se te creara un archivo, entonces dirígete al archivo siguiente:

config/sluggable.php

Ese archivo retorna un array. En la llave ‘onUpdate’ cambia el valor a true. De hecho en al archivo mismo te da una explicación.
Quedaría así:

'onUpdate' => true,

Tratamiento de ciclo de uso de Laravel

Creamos rutas -> creamos Controlador -> configuramos -> creamos vista

Para eliminar una imagen debemos usar la clase** storage**

public function destroy(Post $post)
    {
        // Eliminación de una imagen
        Storage::disk('public')->delete($post->image);

        //Eliminar un post usando delete
        $post->delete();

        // Creamos una redirección a la vista anterior 
        // enviando feedback al usuario
        // usando una variable flash

        return back()->with('status', 'Eliminado con éxito');
    }

Excelente clase muy genial la forma de actualizar y eliminar

Actualizando la base de datos con la data enviada por el formulario de edicion
Funcion de Eliminar posts
12
A)Actualizar DB
B) Eliminacion de Posts

A)"PostController.php

use Illuminate\Support\Facades\Storage; //importamos para eliminar img


			//le pasamos PostRequest //archivo de validacion
    public function update(PostRequest $request, Post $post)
    {   

      
        $post->update(($request)->all()); //actualizamos todos los campos


        Storage::disk('public')->delete($post->image);//eliminamos foto existent


        if($request->file("file")){
            //si viene imagen eliminamos la anterior y guardamos la nueva
            $post->image= $request->file("file")->store("posts","public");
            $post->save();
        };

        return back()->with('status',"Actualizado con exito !");
    }





B) "PostController.php
    public function destroy(Post $post)
    {
        Storage::disk('public')->delete($post->image); //eliminar img
       $post->delete();

       return back()->with('status',"Eliminado con exito!");
    }

por ejemplo tengo en title que sea unico, entonces quiero utilizar el mismo formRequest que es PostRequest, como lo solucionaria??, o tengo que crear otro formRequest?