coderflexx/laravel-presenter

使用演示器编写干净/可重用的代码。

v2.0.0 2024-03-16 16:02 UTC

README

The Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

以干净的方式展示模型属性,而不将其放入错误的文件中。

安装

您可以通过composer安装此包

composer require coderflexx/laravel-presenter

您可以使用以下命令发布配置文件:

php artisan vendor:publish --provider="Coderflex\LaravelPresenter\LaravelPresenterServiceProvider"

这是发布配置文件的内容

return [

    /*
    |--------------------------------------------------------------------------
    | Presenter Namespace
    |--------------------------------------------------------------------------
    |
    | This value informs LaravelPresenter which namespace you will be 
    | selecting to store your presenters by default.
    | If this value equals to null, "App\Presenter" will be used 
    | by default.
    |
    */

    'presenter_namespace'   => 'App\\Presenters',
];

使用

此包的实现非常简单,您需要做的只是以下几步

模型实现

  • 实现 CanPresent 接口
  • 使用 UsesPresenters 特性
use Coderflex\LaravelPresenter\Concerns\CanPresent;
use Coderflex\LaravelPresenter\Concerns\UsesPresenters;
// ...

class User extends Authenticatable implements CanPresent
{
    use UsesPresenters;

    // ...
}

创建新的模型演示器类

此包为您提供了一种简单的方式来生成新的 Presenter 类,您只需要使用 presenter:make 命令。

php artisan presenter:make UserPresenter

在我们的例子中,UserPresenter 默认位于 App\Presenters

这是 UserPresenter 文件的内容

<?php

namespace App\Presenters;

use Coderflex\LaravelPresenter\Presenter;

class UserPresenter extends Presenter
{
    // 
}

如果您想更改目录,您有两个选项。

第一个选项是在创建演示器类时设置完整的命名空间

php artisna presenter:make App\Models\Presenter\UserPresenter

或者更改 config/laravel-presenter 文件中的 presenter_namespace

return [
    ...

    'presenter_namespace'   => 'App\\Presenters',

    ...
];

使用生成的 Presenter

在您创建了演示器类之后,您需要在 Model 上注册它,通过添加受保护的属性 $presenters

use App\Presenters\UserPresenter;
use Coderflex\LaravelPresenter\Concerns\CanPresent;
use Coderflex\LaravelPresenter\Concerns\UsesPresenters;
// ...

class User extends Authenticatable implements CanPresent
{
    use UsesPresenters;

    protected $presenters = [
        'default' => UserPresenter,
    ];
}

默认情况下,您的演示器类的类型是 default,但您可以使用任意多的演示器,只需要在 $presenters 属性中识别类型。

示例

现在,在我们生成了 presenter 类并成功在我们的模型中实现它之后,我们可以这样使用它

在您的 UserPresenter 类或任何您生成的演示器类中。

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

我们在其中添加了一个新的方法来展示 fullName

在您的 blade 或任何您想使用的地方,您可以这样做

$user->present()->fullName

您的应用程序将从您添加的方法中显示全名。

添加另一种演示器类型

正如我上面说的,默认类型将是 default,但是,您可以添加更多类型,只要您需要。

以下是一个示例

use App\Presenters\UserPresenter;
use Coderflex\LaravelPresenter\Concerns\CanPresent;
use Coderflex\LaravelPresenter\Concerns\UsesPresenters;
// ...

class User extends Authenticatable implements CanPresent
{
    use UsesPresenters;

    protected $presenters = [
        'default' => UserPresenter,
        'setting' => UserSettingPresenter,
    ];
}

生成新的 UserSettingPresenter

php artisan presenter:make UserSettingPresenter

UserSettingPresenter 方法添加任何内容

...
class UserSettingPresenter extends Presenter
{
    public function lang()
    {
        return $this->model->settings->defaultLang;
    }
}
...

最后,将 setting 设置为类型

$user->present('setting')->lang;

通过这种方式,您可以分割您的逻辑并使您的代码库更加干净。

测试

composer test

变更日志

请参阅变更日志,获取有关最近更改的更多信息。

贡献

请参阅贡献指南,获取详细信息。

安全漏洞

请查看我们的安全策略,了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。