定制 hardevine/laravel-auto-presenter 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

hardevine/laravel-auto-presenter

Composer 安装命令:

composer require hardevine/laravel-auto-presenter

包简介

A system for auto-decorating models with presenter objects.

README 文档

README

This package automatically decorates objects bound to views during the view render process.

Banner

Build Status StyleCI Status Software License Packagist Downloads Latest Version

Features

  • Automatically decorate objects bound to views
  • Automatically decorate objects within paginator instances
  • Automatically decorate objects within arrays and collections

Installing

Laravel Auto Presenter requires PHP 7.1-8.1 and supports Laravel 5.5-9. If you need support for older Laravel or PHP versions, please choose an older version of Laravel Auto Presenter.

Auto Presenter L5.1 L5.2 L5.3 L5.4 L5.5 L5.6 L5.7 L5.8 L6 L7 L8 L9
4.3
5.0
6.2
7.7

To get the latest version, simply require the project using Composer:

$ composer require mccool/laravel-auto-presenter

Once installed, if you are not using automatic package discovery, then you need to register the McCool\LaravelAutoPresenter\AutoPresenterServiceProvider service provider in your config/app.php.

You can also optionally alias our facade:

        'AutoPresenter' => McCool\LaravelAutoPresenter\Facades\AutoPresenter::class,

Upgrading

Version 6 to 7

In Laravel Auto Presenter 7, note that:

  • Laravel 5.5-8 are supported now. Use V6 if you need L5.1-5.4.
  • Our new minimum PHP version requirement is 7.1.3, up from 7.0.0.

Version 5 to 6

Going from Laravel Auto Presenter 5, to 6, note that:

  • We have a new Decoratable interface to determine if relations can be decorated. While this is not a BC break, since HasPresenter extends it, it is definitely worth noting.
  • v6 supports Laravel 5.5 now, without dropping support for 5.1+.
  • Our new minimum PHP version requirement is 7.0.0, up from 5.5.9.

Version 4 to 5

If you're upgrading from Laravel Auto Presenter 4, to 5, note that:

  • The BasePresenter no longer has a constructor, so you cannot call parent::__construct($resource).
  • The model is now injected using the setWrappedObject method, inherited from the BasePresenter.
  • V5 now supports Laravel 5.4 as well as 5.1, 5.2, and 5.3.

Usage

To show how it's used, we'll pretend that we have an Eloquent Post model. It doesn't have to be Eloquent, it could be any kind of class. But, this is a normal situation. The Post model represents a blog post.

I'm using really basic code examples here, so just focus on how the auto-presenter is used and ignore the rest.

use Example\Accounts\User;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $table = 'posts';
    protected $fillable = ['author_id', 'title', 'content', 'published_at'];

    public function author()
    {
        return $this->belongsTo(User::class, 'author_id');
    }
}

Also, we'll need a controller..

use Example\Accounts\Post;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\View;

class PostsController extends Controller
{
    public function getIndex()
    {
        $posts = Post::all();
        return View::make('posts.index', compact('posts'));
    }
}

and a view...

@foreach($posts as $post)
    <li>{{ $post->title }} - {{ $post->published_at }}</li>
@endforeach

In this example the published_at attribute is likely to be in the format: "Y-m-d H:i:s" or "2013-08-10 10:20:13". In the real world this is not what we want in our view. So, let's make a presenter that lets us change how the data from the Post class is rendered within the view.

use Carbon\Carbon;
use Example\Accounts\Post;
use McCool\LaravelAutoPresenter\BasePresenter;

class PostPresenter extends BasePresenter
{
    public function published_at()
    {
        $published = $this->wrappedObject->published_at;

        return Carbon::createFromFormat('Y-m-d H:i:s', $published)
            ->toFormattedDateString();
    }
}

Note that the model is injected by calling the setWrappedObject method, inherited from BasePresenter.

We need the post class to implement the interface.

use Example\Accounts\User;
use Example\Blog\PostPresenter;
use McCool\LaravelAutoPresenter\HasPresenter;
use Illuminate\Database\Eloquent\Model;

class Post extends Model implements HasPresenter
{
    protected $table = 'posts';
    protected $fillable = ['author_id', 'title', 'content', 'published_at'];

    public function author()
    {
        return $this->belongsTo(User::class, 'author_id');
    }

    public function getPresenterClass()
    {
        return PostPresenter::class;
    }
}

Now, with no additional changes our view will show the date in the desired format.

The Decoratable interface is used to allow the model's relations to be decorated, and the HasPresenter interface (which extends that one) is used to have the model itself decorated.

Troubleshooting

If an object isn't being decorated correctly in the view then there's a good chance that it's simply not in existence when the view begins to render. For example, lazily-loaded relationships won't be decorated. You can fix this by eager-loading them instead. Auth::user() will never be decorated. I prefer to bind $currentUser to my views, anyway.

If an object is a relation of another object and it isn't being decorated in the view, you might not have added the Decoratable interface to the other object. To fix this, add the Decoratable interface to the other object.

Security

If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. You may view our full security policy here.

License

Laravel Auto Presenter is licensed under The MIT License (MIT).

For Enterprise

Available as part of the Tidelift Subscription

The maintainers of mccool/laravel-auto-presenter and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.

hardevine/laravel-auto-presenter 适用场景与选型建议

hardevine/laravel-auto-presenter 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 51 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 11 月 07 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「laravel」 「presenter」 「eloquent」 「lpm」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 hardevine/laravel-auto-presenter 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 hardevine/laravel-auto-presenter 我们能提供哪些服务?
定制开发 / 二次开发

基于 hardevine/laravel-auto-presenter 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 51
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 26
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 75
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-11-07