mercredi 13 mai 2020

Laravel Presenters Best Practice

I want to understand what should be presenters in Laravel. For example, I already have some kind of thinking and sample code about Laravel Presenters.

Code:

Base Abstract Presenter

<?php

namespace App\Presenter;

abstract class Presenter
{
    protected $model;

    public function __construct(Model $model)
    {
        $this->model = $model;
    }

    public function __call($method, $args)
    {
        return call_user_func_array([$this->model, $method], $args);
    }

    public function __get($name)
    {
        return $this->model->{$name};
    }
}

Example Presenter

<?php

namespace App\Users\Presenters;

use App\Presenter\Presenter;

class UserPresenter extends Presenter
{
    public function fullName()
    {
        return trim($this->model->first_name . ' ' . $this->model->last_name);
    }

    public function createdAt()
    {
        return $this->model->created_at->format('n/j/Y');
    }
}

Example Presenter Usage:

<?php

namespace App\Http\Controllers;

use App\Users\Presenters\UserPresenter;
use App\Http\Controllers\Controller;

class UsersController extends Controller
{
    public function show($id)
    {
        $user = new UserPresenter(User::findOrFail($id));

        return response()->json([
            'name' => $user->fullName(),
            'role' => $user->role(),
            'created_at' => $user->createdAt(),
            'is_active' => $user->isActive(),
        ]);
    }
}

This design patterns for Laravel Presenters is right or I've any errors? How must be ideal presenters?

Thanks for responding!

Aucun commentaire:

Enregistrer un commentaire