inakianduaga/eloquent-external-storage

为 eloquent 模型添加透明的外部存储

v1.0 2015-01-26 23:11 UTC

README

Build Status Coverage Status Code Climate HHVM Status Dependency Status

为 eloquent 模型添加外部存储功能。

功能

  • 使用 eloquent 模型的 setContent()getContent() 方法将模型相关的内容保存/检索到外部存储。现在您可以轻松地将所有这些二进制数据从数据库中移除,而无需移动一根手指。
  • 存储支持不同的驱动程序,目前实现了 fileAmazon AWS S3
  • 不同的模型可以实施不同的存储驱动程序,配置分离
  • 存储驱动程序可以动态更新。

安装

将包作为 composer 依赖项添加

在您的 composer.json 文件中,包括

"require": {
        "inakianduaga/eloquent-external-storage" : "dev-master",
    },

然后运行

composer update --no-scripts inakianduaga/laravel-html-builder-extensions

安装此包

数据库配置

存储驱动程序需要三个额外的字段,其中存储内容路径、内容 md5 校验和以及用于存储内容的驱动程序类。

  • src/migration 下提供了一个迁移示例。
  • 数据库字段名称可以是自定义命名的,只需修改模型的 $databaseFields 属性即可
class ActualModel extends InakiAnduaga\EloquentExternalStorage\Models\AbstractModelWithExternalStorage {

    /**
     * Under what db field we store the content path/md5/storage_driver_class for this model
     */
    protected $databaseFields = array(
        'contentPath' => 'content_path',
        'contentMD5' => 'content_md5',
        'storage_driver' => 'storage_driver',
    );
    
}

配置

需要外部存储的每个模型(类)都必须设置一个配置,由模型属性控制

class ActualModel extends InakiAnduaga\EloquentExternalStorage\Models\AbstractModelWithExternalStorage {

   /**
    * This is the path to the driver configuration that will be used for this model class, independently of other classes
    */
   protected static $storageDriverConfigPath;    
}

动态选择/更改存储驱动程序

如果您想为特定模型动态切换存储驱动程序,可以使用模型的 setStorageDriver(StorageDriver $driver, $storageDriverConfigurationPath = null) 方法。这将使用给定的驱动程序和选择的配置路径(如果为 null 则保留当前配置路径)

驱动程序配置

该包为不同包含的驱动程序提供占位符配置。在 laravel 安装根目录下运行

php artisan config:publish inakianduaga/eloquent-external-storage

然后您可以在文件中修改占位符值

  • Aws S3 驱动程序:app/config/packages/inakianduaga/eloquent-external-storage/awsS3.php
  • 文件驱动程序 app/config/packages/inakianduaga/eloquent-external-storage/file.php

请注意,当使用 S3 时,应将模型的 $storageDriverConfigPath 属性设置为指向 inakianduaga/eloquent-external-storage::awsS3,如上述示例所示。

使用方法

  • 只需在您的 eloquent 模型中扩展 InakiAnduaga\EloquentExternalStorage\Models\AbstractModelWithExternalStorage(如果无法使用类扩展,则可以使用特质 InakiAnduaga\EloquentExternalStorage\Models\ModelWithExternalStorageTrait)。

    • 在扩展的模型中设置驱动程序/数据库配置属性(见上文)。
  • 要附加/检索与模型关联的外部内容

    • 使用模型的 setContent 方法设置内容(将在更新/保存/创建时实际保存)
    • 使用 getContent 来检索实际内容

开发与测试

要求

  • 安装 nodenpm,之后运行 npm install 安装开发工具

  • 安装 sqlite 驱动程序以运行测试

    • Ubuntusudo apt-get install sqlite3 libsqlite3-dev 然后执行 sudo apt-get install php5-sqlite

工具

有几个与测试相关的命令

  • gulp test:运行单元测试一次
  • gulp tdd:检测到更改后连续运行单元测试

两种选项都有能力以不同格式生成代码覆盖率报告。当选择此选项时,将启动本地服务器以可视化覆盖率报告

测试 AWS S3 驱动程序

  • 本地:可以通过 tests/.env 文件提供有效的 AWS S3 凭据,请参阅 tests/.env.example 作为示例。如果没有设置凭据,则将跳过 AWS S3 测试
  • CI:通过在travis.yml中传递加密凭证(仅适用于inakianduaga/eloquent-external-storage仓库)来执行Travis CI集成。
  • Travis CI中的Amazon S3测试

测试覆盖率报告

  • gulp test --generateCoverage=coverageHtml 生成html代码覆盖率报告(位于./coverage文件夹下)

文档生成

  • 通过运行gulp docs可以生成包代码文档,生成的文档位于./docs文件夹中