En la ultima version de laravel que es la 8 no requiere agregar el
public $collects = PostResource::class;
Fundamentos
Lo que aprenderás sobre API REST con Laravel
¿Qué es un API?
Sitio web: estructura inicial
Sitio web: completando la estructura
Mejorando el aspecto del sitio con Tailwind CSS
Términos
API
Versión 1: planificación y configuración inicial
Versión 1: recurso
Versión 1: colección
Repaso del código
Versión 2: planificación y configuración inicial
Versión 2: recurso
Versión 2: colección
Autenticación
Introducción a la API privada
Autenticación
Acceso
Conclusión
Repaso final
Despedida
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 7
Preguntas 2
En la ultima version de laravel que es la 8 no requiere agregar el
public $collects = PostResource::class;
A mí me lo ha hecho directamente sin añadir public $collects = PostResource::class; Entiendo que con la versión actual lo pilla directamente.
Les comparto el código fuente del archivo,
App\Http\Resources\V2\PostCollection.php
<?php
namespace App\Http\Resources\V2;
use Illuminate\Http\Resources\Json\ResourceCollection;
class PostCollection extends ResourceCollection
{
public $collects = PostResource::class;
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'data' => $this->collection,
'meta' => [
'organization' => 'Platzi',
'authors' => [
'Italomoralesf',
'Platzi'
]
],
'type' => 'articles'
];
}
}
Estoy en la versión 9.x de Laravel y no es necesario el
public $collects = PostResource::class;
para que los datos se muestren y ordenen en base al recurso.
Algo interesante. Simplemente luego de tener el archivo de Recursos este funciona en forma automática
Basicamente repetimos la configuracion inicial para crear una API
creamos el controlador y los “recursos” para personalizar la salida.
php artisan make:controller Api/V2/PostController --api --model=Post
php artisan make:resource V2/PostResource
php artisan make:resource V2/PostCollection
Primero que todo habilitamos la ruta de la api V2
use App\Http\Controllers\Api\V1\PostController as PostV1;
use App\Http\Controllers\Api\V2\PostController as PostV2;
Route::apiResource('v1/posts', PostV1::class)
->only(['index', 'show', 'destroy']);
Route::apiResource('v2/posts', PostV2::class)
->only(['index', 'show']);
… > api > V2 > postcontroller
Relacionamos el index y show con su respectivo recurso
use App\Http\Resources\V2\PostResource;
use App\Http\Resources\V2\PostCollection;
public function index()
{
return new PostCollection(Post::latest()->paginate());
}
public function show(Post $post)
{
return new PostResource($post);
}
creamos le aplicamos la configuracion al recurso
… > Resource > V2 > PostResource
public function toArray($request)
{
return [
'id' => $this->id,
'post_name' => $this->title,
'slug' => $this->slug,
'content' => $this->content,
'author' => [
'name' => $this->user->name,
'email' => $this->user->email,
],
'created_at' => $this->published_at
];
}
Como estamos enviando la información del autor tenemos que agregar esta al modelo del post en App > Models > Post public function user() {
return $this->belongsTo(User::class);
}
… > Resource > V2 > PostCollection
public function toArray($request)
{
return [
'data' => $this->collection,
'meta' => [
'organization' => 'Platzi',
'authors' => [
'Camilo Mezu',
'Mezum sas'
]
],
'type' => 'articles'
];
}
Tambien se podría realizar este metodo para la colección
UserResource::collection(User::all());
Les recomiendo darse una leida por la doc:
https://laravel.com/docs/8.x/eloquent-resources#resource-collections
bueno este tema de resources y colletions
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.