tobento/service-dir

PHP应用程序的目录管理器。

1.0.0 2021-10-30 05:55 UTC

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)

致谢