Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Versión 1: colección

9/18
Recursos

Aportes 15

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Algo que hacía en node para mantener un estándar en las respuestas es utilizar constantes para los status code, y además informar si la acción fue realizada correctamente.

Encontré esto para poder aplicar lo mismo en laravel:
https://medium.com/@naumancs/how-to-use-http-status-codes-properly-in-laravel-3f66eebf0e66

public function destroy(Post $post)
    {
        $post->delete();
        return response()->json([
            'message' => 'Post Deleted'
        ], Response::HTTP_ACCEPTED);
    }

Algo interesante es que cuando eliminas un recurso, es una buena práctica hacer un “soft delete”, para eso únicamente hay que usar el trait SoftDeletes. Básicamente un SoftDelete es una forma de “eliminar los datos” sin que tengas que borrarlos realmente de la base de datos (digamos que en la base de datos hay un campo que dice si el elemento es visible o no) 😄
.
En cuanto al reto, en Laravel puedes retornar un mensaje junto a un código de respuesta:

$post->delete();
return response("", 204);

Recuerden agregar la opción destroy, al array de only dentro de las rutas de api 😄

Comparto mi código utilizado para eliminar el recurso:

    public function destroy(Post $post)
    {
        $post->delete();
        return response()->json(null, 204);
    }

Más info: https://laravel.com/docs/8.x/responses#json-responses

public function destroy(Post $post)
{
    $post->delete();
    return response()->json(null, Response::HTTP_NO_CONTENT);
}

Mi solucion al reto gracias a la comunidad por sus aportes

public function destroy(Post $post)
    {
        if ($post->delete()) {
            return response()->json([
                'data' => [
                    'message' => 'Post Deleted'
                ]
            ], Response::HTTP_NO_CONTENT);
        }
        return response()->json([
            'data' => [
                'message' => 'Error deleting Post'
            ],
            Response::HTTP_INTERNAL_SERVER_ERROR
        ]);
    }

Versión 1: colección

le vamos a decir que queremos muestre los siguientes recursos para consuar en la api:

<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::apiResource('v1/posts', App\Http\Controllers\Api\V1\PostController::class)
    ->only(['index', 'show']);

en PostController

public function index()
    {
        return  PostResource::collection(Post::latest()->paginate());
    }

consultamos con postman y ya debería traer todos los posts:

http://127.0.0.1:8000/api/v1/posts

Para el reto, agregué el campo ‘deleted_at’ a la tabla de posts con una migracion, ya que no es recomendable borrar definitivamente un registro en la bd:

php artisan make:migration add_deleted_at_posts_table

.
Luego agregué el trait SoftDeletes como se describe en la documentación de Laravel.
.
Después corrí la migración para agregar el campo:

php artisan migrate

.
Por último, en el metodo ‘destroy’ del PostController:

$post->delete();
return response()->json([], Response::HTTP_NO_CONTENT);

.
api.php

Route::apiResource("v1/posts", \App\Http\Controllers\Api\V1\PostController::class)->only(["index", "show", "destroy"]);

Compartó mi respuesta

  public function destroy(Post $post)
    {
        $post->delete();
        return response()->json(null,204);
    }
$post->delete();
return (new PostResource($post))
->additional([
“msg”=>“Post eliminado”
])
->response()
->setStatusCode(204);

Por qué en el caso de index no se usa new antes de PostResource?

    $message = Post::findOrFail($post->id) ? "this ID:{$post->id} has been deleted" : "This ID:{$post->id} doesn't exists";
    $post->delete();
    return response()->json(["message"=>$message],204);

Para hacer el endpoint de delete, a tener en cuenta, habría que habilitar en api.php, el resource de destroy.

Route::apiResource(‘v1/posts’, \App\Http\Controllers\Api\V1\PostController::class)
->only([‘show’, ‘index’, ‘destroy’]);

Un recurso solo se usa para Api? o se puede usar para pasarle al blade?

Me gsutan estos conceptos, son muy prácticos.
Creo que si decidimo realizar un sistema multi plataforma y como BackEnd tenemos a Php en Laravel, este concepto de API y la forma en la que nos enseña el profesor son las que necesitaremos para conectar el sistema a nuestra lógica en Back, ya sea para leer, procesar, almacenar y modificar datos.

Os dejo el ejemplo de como lo he realizado 😃

public function destroy(Post $post)
{
    $post->delete();
    return response()->noContent();
}