tobento / service-dir
PHP应用程序的目录管理器。
1.0.0
2021-10-30 05:55 UTC
Requires
- php: >=8.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.0
This package is not auto-updated.
Last update: 2024-09-29 18:18:49 UTC
README
目录服务提供了一种管理应用程序中目录的方法。
目录
入门
运行此命令添加运行中的目录服务的最新版本。
composer require tobento/service-dir
要求
- PHP 8.0或更高版本
亮点
- 框架无关,可与任何项目一起使用
- 解耦设计
简单示例
以下是如何使用目录服务的简单示例
use Tobento\Service\Dir\Dirs; use Tobento\Service\Dir\Dir; $dirs = new Dirs( new Dir(dir: 'home/private/views', name: 'views'), new Dir('home/private/config', 'config'), ); $dirs->dir('home/private/cache', 'cache'); var_dump($dirs->get('views')); // string(19) "home/private/views/"
文档
创建目录
use Tobento\Service\Dir\DirsInterface; use Tobento\Service\Dir\Dirs; use Tobento\Service\Dir\Dir; $dirs = new Dirs( new Dir(dir: 'home/private/views', name: 'views'), new Dir('home/private/config', 'config'), ); var_dump($dirs instanceof DirsInterface); // bool(true)
添加目录
添加
通过添加方法添加目录,该方法接受实现DirInterface的对象。
use Tobento\Service\Dir\Dirs; use Tobento\Service\Dir\Dir; use Tobento\Service\Dir\DirInterface; $dirs = new Dirs(); // dir: DirInterface $dirs->add(dir: new Dir('home/private/config', 'config')); $dirs->add(new Dir('home/private/config', 'config')) ->add(new Dir('home/private/views', 'views'));
目录
通过目录方法添加目录。
use Tobento\Service\Dir\Dirs; $dirs = new Dirs(); $dirs->dir( dir: 'home/private/config', // string name: 'config', // null|string group: 'front', // string priority: 10, // int ); $dirs->dir('home/private/views', 'views') ->dir('home/private/cache', 'cache');
过滤目录
您可以使用返回新实例的过滤方法。
过滤
use Tobento\Service\Dir\Dirs; use Tobento\Service\Dir\DirInterface; $dirs = new Dirs(); $dirs->dir( dir: 'home/private/views/front', group: 'frontend', priority: 10, ); $dirs->dir( dir: 'home/private/views/backend', group: 'backend', ); // filter by group: $dirs = $dirs->filter(fn(DirInterface $dir): bool => $dir->group() === 'frontend');
分组
use Tobento\Service\Dir\Dirs; $dirs = new Dirs(); $dirs->dir( dir: 'home/private/views/front', group: 'frontend', priority: 10, ); $dirs->dir( dir: 'home/private/views/backend', group: 'backend', ); $dirs = $dirs->group('frontend');
组
use Tobento\Service\Dir\Dirs; $dirs = new Dirs(); $dirs->dir( dir: 'home/private/views/front', group: 'frontend', priority: 10, ); $dirs->dir( dir: 'home/private/views/backend', group: 'backend', ); $dirs = $dirs->groups(['frontend', 'backend']);
仅
use Tobento\Service\Dir\Dirs; $dirs = new Dirs(); $dirs->dir('home/private/views', 'views'); $dirs->dir('home/private/config', 'config'); $dirs->dir('home/private/cache', 'cache'); $dirs = $dirs->only(['views', 'cache']);
除了
use Tobento\Service\Dir\Dirs; $dirs = new Dirs(); $dirs->dir('home/private/views', 'views'); $dirs->dir('home/private/config', 'config'); $dirs->dir('home/private/cache', 'cache'); $dirs = $dirs->except(['views', 'cache']);
排序目录
按优先级排序
use Tobento\Service\Dir\Dirs; $dirs = new Dirs(); $dirs->dir( dir: 'home/private/views/front', priority: 10, ); $dirs->dir( dir: 'home/private/views/theme/front', priority: 15, ); // sort by priority: $dirs = $dirs->sort();
按回调排序
use Tobento\Service\Dir\Dirs; use Tobento\Service\Dir\DirInterface; $dirs = new Dirs(); $dirs->dir( dir: 'home/private/views/front', priority: 10, ); $dirs->dir( dir: 'home/private/views/theme/front', priority: 15, ); // sort by name: $dirs = $dirs->sort( fn(DirInterface $a, DirInterface $b): int => $a->name() <=> $b->name() );
迭代目录
use Tobento\Service\Dir\Dirs; use Tobento\Service\Dir\DirInterface; $dirs = new Dirs(); $dirs->dir('home/private/views', 'views'); $dirs->dir('home/private/config', 'config'); foreach($dirs->all() as $dir) { var_dump($dir instanceof DirInterface); // bool(true) } // or just: foreach($dirs as $dir) { var_dump($dir instanceof DirInterface); // bool(true) }
获取目录
获取
获取单个目录。
use Tobento\Service\Dir\Dirs; use Tobento\Service\Dir\DirNotFoundException; $dirs = new Dirs(); $dirs->dir('home/private/views', 'views'); $dirs->dir('home/private/config', 'config'); var_dump($dirs->get('config')); // string(20) "home/private/config/" // throws DirNotFoundException if dir is not found $dirs->get('cache');
getDir
获取单个目录对象。
use Tobento\Service\Dir\Dirs; use Tobento\Service\Dir\DirInterface; use Tobento\Service\Dir\DirNotFoundException; $dirs = new Dirs(); $dirs->dir('home/private/views', 'views'); $dirs->dir('home/private/config', 'config'); var_dump($dirs->getDir('config') instanceof DirInterface); // bool(true) // throws DirNotFoundException if dir is not found $dirs->getDir('cache');
所有
获取所有目录。
use Tobento\Service\Dir\Dirs; use Tobento\Service\Dir\DirInterface; $dirs = new Dirs(); $dirs->dir('home/private/views', 'views'); $dirs->dir('home/private/config', 'config'); $dirs = $dirs->all('config'); // array<string, DirInterface>
有
use Tobento\Service\Dir\Dirs; $dirs = new Dirs(); $dirs->dir('home/private/config', 'config'); var_dump($dirs->has('config')); // bool(true) var_dump($dirs->has('view')); // bool(false)
目录
use Tobento\Service\Dir\Dir; use Tobento\Service\Dir\DirInterface; $dir = new Dir( dir: 'home/private/config', // string name: 'config', // null|string group: 'front', // string priority: 10, // int ); var_dump($dir instanceof DirInterface); // bool(true) var_dump($dir->dir()); // string(20) "home/private/config/" var_dump($dir->name()); // string(6) "config" var_dump($dir->group()); // string(5) "front" var_dump($dir->priority()); // int(10)