metra/cascading-filesystem

由多个目录合并形成的虚拟文件系统

1.0.1 2021-07-28 01:00 UTC

This package is auto-updated.

Last update: 2024-09-28 08:09:43 UTC


README

安装

将此包作为依赖项添加到您项目中的 composer.json 配置文件中

require: {
    "koseven/cascading-filesystem": "~1.0"
}

现在在项目的根目录中,终端运行 composer install

然后您必须启用 composer 自动加载(如果您还没有的话),通过要求自动加载文件

// Enable composer autoloading
require 'vendor/autoload.php';

有关 composer 的更多信息,请参阅其 文档

概念

级联文件系统(通常缩写为 CFS)是一组单独的目录路径。这些目录的内容被虚拟合并在一起,从而产生一种错觉,即所有文件都在同一个目录中。位于后定义目录中的文件优先级高于(并替换)同一位置的文件。这使得只需将文件放在后定义目录的相同位置即可覆盖任何文件。

例如,假设我们在级联文件系统中有三个这些目录

directory 1
|-- cat.png
|-- code
|    |-- Foo.php
|    |-- Bar.php
|    +-- Baz.php
+-- music
     +-- White & Nerdy.mp3

directory 2
|-- dog.bmp
|-- mouse.jpg
+-- code
     +-- Foo.php

directory 3
|-- cat.png
+-- code
     |-- Foo.php
     +-- Baz.php

当目录内容被虚拟合并时,这将是结果

root
|-- cat.png (From directory 3)
|-- dog.bmp (From directory 2)
|-- mouse.jpg (From directory 2)
|-- code
|    |-- Foo.php (From directory 3)
|    |-- Bar.php (From directory 1)
|    +-- Baz.php (From directory 3)
+-- music
     +-- White & Nerdy.mp3 (From directory 1)

实例化

use Kohana\CascadingFilesystem\Filesystem\CascadingFilesystem;
use Doctrine\Common\Cache\ArrayCache;

// Instantiate cache
$cache = new ArrayCache();

// Instantiate CFS
$cfs = new CascadingFilesystem($cache, [
    'directory/path/one',
    'directory/path/two',
    'directory/path/three',
]);

查找文件

这将在级联文件系统中找到具有最高优先级的文件路径,并返回其绝对位置

// Get absolute path
$path = $cfs->getPath('code/foo.php');

您还可以检索文件存在的所有位置,这将返回一个包含绝对文件路径的数组

// Get all absolute paths
$paths = $cfs->getAllPaths('code/foo.php');

这将在合并的 CFS 中列出目录的文件

// List directory contents
$files = $cfs->listFiles('code');

模块

模块实际上是级联文件系统中目录的扩展概念。模块获得的附加功能是可以进行初始化,并且其内的类可以被自动加载。模块提供了一个轻松组织代码并使任何部分更容易在不同应用程序间共享或传输的方法。

初始化

为了初始化级联文件系统中启用的所有模块

use Kohana\CascadingFilesystem\Initializer\ModulesInitializer;

// Initialize all modules
(new ModulesInitializer($cfs))->initialize();

这应该在您开始使用模块之前完成,因为它们可能有初始化时满足的先决条件。

规范

如果您希望初始化您的模块,必须在根目录中添加一个 init.php 文件。当用户初始化他们的所有模块时,此初始化文件将被包含在 PHP 脚本中。这是执行模块功能所需的任何 PHP 代码的理想位置。

自动加载

为了启用模块内部类的自动加载,您必须首先通过执行其注册方法来注册自动加载类

use Kohana\CascadingFilesystem\Autoloader\ModulesAutoloader;

// Register Kohana module autoloader
(new ModulesAutoloader($cfs))->register();

还有一个向后兼容的模块类自动加载器,它仍然使用旧文件命名约定(小写)

use Kohana\CascadingFilesystem\Autoloader\LegacyModulesAutoloader;

// Register legacy Kohana module autoloader
(new LegacyModulesAutoloader($cfs))->register();

现在自动加载器已注册,您可以使用任何类,就像它们已经被包含一样。还有一个 unregister() 方法,用于在注册后注销自动加载器。为了更精确地控制注册自动加载器,您可以直接使用 spl_autoload_register() 启用其 autoload 方法。

规范

所有需要自动加载的类都必须遵循此规范

  1. 所有类都必须放置在模块根目录中的 classes/ 目录中。
  2. 所有类都必须遵循 PSR-0 标准。
  • 所有类名都必须大写,例如 Foo_Bar_BazTeapotHello_World
  • 类的文件名和位置必须与类的名称完全匹配(包括大小写)。例如,类 Foo_Bar_Baz 必须位于 classes/Foo/Bar/Baz.php
  • 类名中的任何下划线字符都将被转换为斜杠。

如果您的类不遵循此约定,则此包无法自动加载它们。您将需要手动包含您的类或创建自己的自动加载器。

模块的查找位置

  • kohana-modules - 一个致力于索引所有Kohana模块的网站,具有优秀的搜索和筛选系统;由Andrew Hutchings创建。

  • kohana-universe - 一个相当全面的模块列表,这些模块可在GitHub上找到,由Kolanos创建。要使您的模块列在这里,请通过GitHub给他发送消息。