bushbaby/gaufrette

此包已被弃用且不再维护。没有建议的替代包。
最新版本(dev-master)的此包没有可用的许可证信息。

一个提供易于配置和访问Gaufrette文件系统抽象层的Zend Framework 2模块。

dev-master 2016-10-27 17:01 UTC

This package is auto-updated.

Last update: 2022-02-23 22:41:48 UTC


README

BsbGaufrette是一个Zendframework 2模块,提供易于配置和访问Gaufrette 文件系统

主要功能

  1. 通过简单的配置,通过ServiceManager公开Gaufrette适配器。此功能已基本完成,不受限制。

  2. 能够轻松处理具有关联文件的实体对象... 此功能仍被视为原型。最终目标是使其与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')
        )
    ),

实现了四个操作

  1. manager->hasXxxxx($entity) - 检查此实体是否存在文件Xxxxx。
  2. manager->peristXxxxx($entity, 'content') - 将内容保存到此实体的Xxxxx。
  3. manager->retrieveXxxxx($entity) - 获取此实体Xxxxx的File对象。
  4. 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,不知道