bushbaby / gaufrette
一个提供易于配置和访问Gaufrette文件系统抽象层的Zend Framework 2模块。
Requires
- php: >=5.3.3.
- knplabs/gaufrette: >=0.1.3,<0.2
- zendframework/zendframework: >=2.0.0,<2.2
This package is auto-updated.
Last update: 2022-02-23 22:41:48 UTC
README
BsbGaufrette是一个Zendframework 2模块,提供易于配置和访问Gaufrette 文件系统。
主要功能
-
通过简单的配置,通过ServiceManager公开Gaufrette适配器。此功能已基本完成,不受限制。
-
能够轻松处理具有关联文件的实体对象... 此功能仍被视为原型。最终目标是使其与Doctrine实体一起工作。
Gaufrette api 本身还不稳定,因此可能会发生变化。
安装
使用Composer
修改您的./composer.json,使其包含以下内容:
"require": {
"bushbaby/gaufrette" : "dev-master"
}
然后在项目根目录中执行,这将安装模块以及Gaufrette库。
composer.phar update
激活
最后修改./config/application.config.php中的"modules"键,使其包含"BsbGaufrette",以在项目中激活BsbGaufrette。
配置
将提供的配置模板复制到autoload目录,以快速开始。
cp ./vendor/bushbaby/gaufrette/config/bsbgaufrette.global.dist.php \
./config/autoload/bsbgaufrette.global.php
使用方法
Gaufrette 管理器
此时,您可以通过服务管理器访问Gaufrette管理器。
$sm = $this->getServiceManager();
$gm = $sm->get('bsbGaufretteManager'); // aliased as 'bsbFS'
此管理器包含一个插件加载器,它知道如何通过工厂实例化Gaufrette库提供的所有(目前只有local和safelocal)适配器。通过get($name)方法执行此操作。
$fs = $gm->get('my_local_save_place');
当名称未配置时,会抛出异常。当您需要测试其存在时,请使用has($name)方法。
if ($gm->has('my_local_save_place')) {
$fs = $gm->get('my_local_save_place');
}
返回的任何对象都保证扩展\Gaufrette\Adapter\Base,因此您现在可以这样做:
$fs->write('my-book.txt', 'once upon a time');
配置Gaufrette文件系统
要能够通过Gaufrette管理器检索Gaufrette适配器,您需要在模块配置中定义它们下的'key'。配置基本上可以自我解释。
<?php
array(
'bsb_gaufrette' => array(
'filesystems' => array(
'my_local_save_place' => array(
'factory' => array(
'name' => 'local',
'options' => array(
'directory' => 'data/gaufrette_fs',
'create' => true
),
),
),
),
),
),
);
'my_local_save_place' 现在是位于data/gaufrette_fs目录中的本地文件系统,如果不存在,则会创建。
与实体对象一起使用
- 如前所述,这项工作尚未完成,可能会发生变化。但我们希望能够通过仅与实体本身一起工作,透明地保存、更新和检索属于实体的文件。当前的实现没有这样做,但有一些抽象方法来实现这一点。
文件本身通常是某种实体的一部分。例如,可能是联系人的图片或属于简历的压缩文件。
假设我们要存储一个带有预览图片的实体。
$manager = $sm->get('bsbFS');
$manager->persistPreviewImage($entity, 'path/to/image.png');
调用方法的第一部分将确定动作;在这种情况下为'持久化'。
它将通过查看调用方法的第二部分(PreviewImage)、实体的ID和选定的命名策略来构造文件名和文件系统中的路径。
它将通过查看配置中定义的entity_map来确定应该使用哪个文件系统。
这意味着对实体的唯一条件是它们必须实现\BsbGaufrette\Doctrine\FSInterface,从而保证有一个可用的getId()方法。如果没有已知的ID,则文件无法与实体关联。
<?php
return array(
'bsb_gaufrette' => array(
'entity_map' => array(
'SomeModule\Entity\SomeEntity' => array('*' => 'my_local_save_place')
)
),
实现了四个操作。
- manager->hasXxxxx($entity) - 检查此实体是否存在文件Xxxxx。
- manager->peristXxxxx($entity, 'content') - 将内容保存到此实体的Xxxxx。
- manager->retrieveXxxxx($entity) - 获取此实体Xxxxx的File对象。
- manager->filenameXxxxx($entity) - 返回构造的文件名。
示例
if ($manager->hasPreviewImage($entity)) {
$file = $manager->retrievePreviewImage($entity);
}
$manager->persistPreviewImage($entity, 'path/to/image.png');
// $file instanceof Gaufrette\File
文件命名 (尚未实现)
文件命名来源于选定的命名策略 - 但方法名和ID都是主要成分。通过文件系统配置,有一个选项可以指定命名策略
限制
- 仅实现了Local和SaveLocal适配器
- 只有当实体有ID时才能持久化/检索
计划
内容
- 支持stream_resources
- 持久化Gaufrette\File
命名策略
- LeftPaddedPropLast : preview-image-0000000XX (默认)
- DirectorySplit : /preview/image/0000000XX
- LeftPaddedPropLast : 0000000XX-preview-image
- Hashedup
- AddExt : preview-image-0000000XX.png
Doctrine事件
- 钩入enitymanager->flush方法以将文件存储和删除到文件系统中。
- 研究通过Subscribers进行Doctrine::flush的持久化和删除
未来
- Doctrine注解支持
- 透明加密/解密,当保存远程文件时很有用...
- 视图助手和操作以构造到资产的URL,不知道