tobento/service-dir
Composer 安装命令:
composer require tobento/service-dir
包简介
A directory manager for PHP applications.
README 文档
README
The Dir Service provides a way for managing directories in an application.
Table of Contents
Getting started
Add the latest version of the dir service running this command.
composer require tobento/service-dir
Requirements
- PHP 8.4 or greater
Highlights
- Framework-agnostic, will work with any project
- Decoupled design
Simple Example
Here is a simple example of how to use the dir service:
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/"
Documentation
Create Dirs
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)
Adding Directories
add
Adding directories by the add method which takes an object implementing the 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'));
dir
Adding directories by the dir method.
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');
Filter Directories
You may use the filter methods returning a new instance.
filter
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');
group
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');
groups
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']);
only
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']);
except
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']);
Sort Directories
Sort by priority
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();
Sort by callback
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() );
Iterating Directories
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) }
Get Directories
get
Get a single directory.
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
Get a single directory object.
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');
all
Get all directories.
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>
has
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)
Directory
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)
Credits
tobento/service-dir 适用场景与选型建议
tobento/service-dir 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 389 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 10 月 30 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「package」 「php」 「directories」 「directory manager」 「tobento」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 tobento/service-dir 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 tobento/service-dir 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 tobento/service-dir 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
PhpPlaisio: Directories
Composer plugin that automatically creates directories defined in your composer.json.
Easy system for work with files and directories
PhpPlaisio: Core Directories
Simple ASCII output of array data
统计信息
- 总下载量: 389
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 21
- 依赖项目数: 12
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-10-30