emarref/namer

一个简单的库,用于判断给定的名称是否可用,如果不可用,则根据策略生成一个新的名称。

0.6 2014-08-10 22:28 UTC

This package is auto-updated.

Last update: 2024-09-23 13:20:32 UTC


README

这是一个简单的库,用于判断给定的名称是否可用,如果不可用,则根据策略生成一个新的名称。

例如,在文件系统中保存文件时,使用Namer确定一个可用的文件名,该文件名不会与其他文件冲突。

Scrutinizer Code Quality Code Coverage Build Status SensioLabsInsight

安装

Composer

将以下配置添加到您的composer.json文件中。

[...]
    "require": {
       "emarref/namer": "dev-master"
   }
[...]

然后运行 php ./composer.phar update emarref/namer

使用方法

$strategy = new Emarref\Namer\Strategy\SuffixStrategy();
$detector = new Emarref\Namer\Detector\ArrayDetector(['Taken', 'Taken copy']);
$namer    = new Emarref\Namer\Namer($strategy, $detector);
echo $namer->getName('Taken'); // Will return "Taken copy 2"

检测器是可选的,但如果在实例化namer时省略,则必须将检测器作为Namer#getName()方法的第二个参数传递。当您的namer在DI容器中配置时,但您需要使用不同的检测器时,这很有用。例如

$namer            = $this->get('default_namer');
$unavailableNames = $repository->getUnavailableNames();
$detector         = new Emarref\Namer\Detector\ArrayDetector($unavailableNames);
echo $namer->getName('Taken', $detector);

使用Symfony2依赖注入容器

parameters:
    namer.default.limit:                    100

    namer.strategy.suffix.suffix:           copy
    namer.strategy.suffix.incremental:      true
    namer.strategy.suffix.ignore_extension: true

    namer.detector.filesystem.path:         /var/www/website/web/uploads

services:
    namer.strategy.suffix:
        class:  Emarref\Namer\Strategy\SuffixStrategy
        public: false
        arguments:
            - %namer.strategy.suffix.suffix%
            - %namer.strategy.suffix.incremental%
            - %namer.strategy.suffix.ignore_extension%

    namer.detector.filesystem:
        class:  Emarref\Namer\Detector\FilesystemDetector
        public: false
        arguments:
            - %namer.detector.filesystem.path%

    namer.default:
        class:  Emarref\Namer\Namer
        public: false
        arguments:
            - @namer.strategy.suffix
            - @namer.detector.filesystem
            - %namer.default.limit%

    namer:
        alias: namer.default

然后您可以通过访问容器中的namer服务来使用namer。

策略

策略是生成新名称的类,基于迭代索引。它必须实现接口Emarref\Namer\Strategy\StrategyInterface。目前有两个可用的策略:HashStrategySuffixStrategy

HashStrategy

返回名称的散列表示形式,与索引连接。支持sha1md5

SuffixStrategy

这是一个简单的策略,它在迭代0时返回未更改的名称,在迭代1时返回附加后缀的名称,之后返回附加后缀和迭代的名称。

例如:名称、名称副本、名称副本2、名称副本3等

后缀也可以使用SuffixStrategy::setIgnoreExtension(false)在文件扩展名之前插入。

检测器

检测器是确定名称是否可用的类。检测器必须实现接口Emarref\Namer\Detector\DetectorInterface。目前有两个可用的简单检测器:ArrayDetectorFilesystemDetector

ArrayDetector

检测数组中是否存在值。

FilesystemDetector

检测文件系统中是否存在文件。

GaufretteDetector

使用Gaufrette适配器检测文件的存在,例如Gaufrette\Adapter\Local