mrgrain/eloquent-service-injection

通过属性注入服务到 Eloquent 模型的简单特性。

1.1.0 2017-02-12 23:55 UTC

This package is not auto-updated.

Last update: 2024-09-19 03:32:45 UTC


README

通过属性注入服务到 Eloquent 模型的简单特性。

Build Status Latest Stable Version Total Downloads License

Laravel 的 Eloquent 模型不支持构造函数服务注入。此特性旨在提供一种简单统一的方法将服务注入到 Eloquent 模型中。它通过使用属性来定义服务,类似于其他模型选项的定义方式(例如,考虑 $casts$with 用于属性转换和预加载)。

要求

  • PHP >= 5.6.0
  • Laravel >= 5.1 或 Lumen >= 5.1

安装

使用 Composer 将包添加到您的仓库。

composer require mrgrain/eloquent-service-injection

用法

通过使用特性扩展您的模型

namespace Mrgrain\EloquentServiceInjection;

class Comment extends Model {
    use ServiceInjectionTrait;
}

为了始终包含特性,请将其添加到所有模型都继承的基础模型中。

将待注入的服务添加到 $inject 属性。

class Comment extends Model {
    use ServiceInjectionTrait;
    
    public $inject = [
        'storage' => Illuminate\Contracts\Filesystem\Filesystem::class
    ];
}

使用数组键来访问服务。

class Comment extends Model {
    use ServiceInjectionTrait;

    public $inject = [
        'storage' => Illuminate\Contracts\Filesystem\Filesystem::class
    ];
    
    public function storeAttachment($path, $contents)
    {
        $this->storage->put($path, $contents);
    }
}

其他用法

虽然特性是为 Eloquent 模型设计的,但它几乎可以用于任何类。以与模型相同的方式添加和使用它。

贡献

首先:感谢您考虑为这个项目做出贡献。没有您,开源社区将不再相同。如果您决定向这个项目提交拉取请求,我恳请您遵守以下指南

  • 注意项目的范围,以避免失望。
  • 请在所有拉取请求中添加适当的测试。
  • 在此项目上进行互动时,请遵循 行为准则