No tienes acceso a esta clase

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

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
7 Hrs
8 Min
50 Seg
Curso de Introducción a Laravel 6

Curso de Introducción a Laravel 6

Profesor Italo Morales F

Profesor Italo Morales F

Actualizando nuestros posts

25/37
Recursos

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?