PHP code example of additionapps / flexible-presenter
1. Go to this page and download the library: Download additionapps/flexible-presenter library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
additionapps / flexible-presenter example snippets
class PostPresenter extends FlexiblePresenter
{
public function values()
{
return [
'id' => $this->id,
'title' => $this->title,
'body' => $this->body,
];
}
}
class PostController extends Controller
{
public function show(Post $post)
{
return Inertia::render('Posts/Show', [
'post' => PostPresenter::make($post)->get(),
]);
}
}
public function values()
{
return [
'id' => $this->id,
'comment_count' => function () {
return $this->comments->count();
},
];
}
[
'comment_count' => fn() => $this->comments->count(),
];
public function values()
{
return [
'id' => $this->id,
'comments' => function () {
return CommentPresenter::collection($this->comments)
->except('body', 'updated_at');
},
];
}
public function values()
{
return [
'id' => $this->resource['id'],
'title' => $this->resource['title'],
];
}
$posts = PostPresenter::collection(Post::all())
->only('id', 'title')
->get();
$posts = PostPresenter::collection(Post::simplePaginate())
->only('id', 'title')
->get();
[
'current_page' => 1,
'data' => [
[
'id' => 1,
'title' => 'foo',
],
[
'id' => 2,
'title' => 'bar',
],
],
'first_page_url' => 'http://example.com/list?page=1',
'from' => 1,
'next_page_url' => null,
'path' => 'http://example.com/list',
'per_page' => 2,
'prev_page_url' => null,
'to' => 2,
];
// In PostPresenter
return [
'comments' => CommentPresenter::collection($this->whenLoaded('comments')),
];
PostPresenter::make($post)->with(function($post){
return [
'title' => strtoupper($post->title),
'new_key' => 'Some value',
];
});
PostPresenter::make($post)->preset('summary');
public function presetSummary()
{
return $this->only('title', 'published_at');
}
PostPresenter::make($post)->preset('summary')->with(function () {
return [
'comment_count' => $post->comments->count(),
];
});
// In PostPresenter...
public function presetSummary()
{
return $this->only('title', 'body');
}
// In Controller...
PostPresenter::make($post)->preset('summary');
// Will return ['title' => 'foo', 'body' => 'bar']
PostPresenter::make($post)->preset('summary')->only('id');
// Will return ['id' => 1]
[
'current_page' => 1,
'data' => [
// your presented resources
],
'first_page_url' => 'http://example.com/list?page=1',
'from' => 1,
'next_page_url' => null,
'path' => 'http://example.com/list',
'per_page' => 2,
'prev_page_url' => null,
'to' => 2,
'links' => [
'create' => 'some-url',
],
];
$posts = PostPresenter::collection($paginatedCollection)
->only('id')
->appends([
'foo' => 'bar',
'links' => ['store' => 'some-other-url'],
])
->get();
[
'current_page' => 1,
'data' => [
// your presented resources
],
'first_page_url' => 'http://example.com/list?page=1',
'from' => 1,
'next_page_url' => null,
'path' => 'http://example.com/list',
'per_page' => 2,
'prev_page_url' => null,
'to' => 2,
'foo' => 'bar',
'links' => [
'create' => 'some-url',
'store' => 'some-other-url',
],
];
PostPresenter::make($post)->only('id', 'title')->get();
PostPresenter::make($post)->all();
PostPresenter::make($post)->get();
return Inertia::render('Posts/Show', [
'post' => PostPresenter::make($post)->only('title'),
]);
return Inertia::render('Posts/Show', PostPresenter::make($post)->only('title'));
bash
php artisan make:presenter PostsPresenter
bash
php artisan make:presenter "Blog/Presenters/PostsPresenter"