emarref / namer
一个简单的库,用于判断给定的名称是否可用,如果不可用,则根据策略生成一个新的名称。
Requires (Dev)
- knplabs/gaufrette: 0.1.*
- phpunit/phpunit: ~3.7
Suggests
- knplabs/gaufrette: If you want to use the GaufretteDetector
README
这是一个简单的库,用于判断给定的名称是否可用,如果不可用,则根据策略生成一个新的名称。
例如,在文件系统中保存文件时,使用Namer确定一个可用的文件名,该文件名不会与其他文件冲突。
安装
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
。目前有两个可用的策略:HashStrategy
和SuffixStrategy
。
HashStrategy
返回名称的散列表示形式,与索引连接。支持sha1
和md5
。
SuffixStrategy
这是一个简单的策略,它在迭代0时返回未更改的名称,在迭代1时返回附加后缀的名称,之后返回附加后缀和迭代的名称。
例如:名称、名称副本、名称副本2、名称副本3等
后缀也可以使用SuffixStrategy::setIgnoreExtension(false)
在文件扩展名之前插入。
检测器
检测器是确定名称是否可用的类。检测器必须实现接口Emarref\Namer\Detector\DetectorInterface
。目前有两个可用的简单检测器:ArrayDetector
和FilesystemDetector
。
ArrayDetector
检测数组中是否存在值。
FilesystemDetector
检测文件系统中是否存在文件。
GaufretteDetector
使用Gaufrette适配器检测文件的存在,例如Gaufrette\Adapter\Local