inakianduaga / eloquent-external-storage
为 eloquent 模型添加透明的外部存储
Requires
- php: >=5.5.0
- aws/aws-sdk-php: dev-master
- illuminate/config: 4.2.x
- illuminate/console: 4.2.x
- illuminate/database: 4.2.x
- illuminate/support: 4.2.x
Requires (Dev)
- mockery/mockery: dev-master
- orchestra/testbench: 2.2.x
- phpunit/phpunit: 4.3.*@dev
- satooshi/php-coveralls: dev-master
- vlucas/phpdotenv: dev-master
This package is not auto-updated.
Last update: 2024-09-28 16:31:07 UTC
README
为 eloquent 模型添加外部存储功能。
功能
- 使用 eloquent 模型的
setContent()、getContent()方法将模型相关的内容保存/检索到外部存储。现在您可以轻松地将所有这些二进制数据从数据库中移除,而无需移动一根手指。 - 存储支持不同的驱动程序,目前实现了
file和Amazon 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来检索实际内容
- 使用模型的
开发与测试
要求
-
安装
node和npm,之后运行npm install安装开发工具 -
安装
sqlite驱动程序以运行测试- Ubuntu:
sudo apt-get install sqlite3 libsqlite3-dev然后执行sudo apt-get install php5-sqlite
- Ubuntu:
工具
有几个与测试相关的命令
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文件夹中