slabphp/bundle-stack

SlabPHP Bundle Stack 管理库

v0.1.8 2018-02-26 00:00 UTC

This package is auto-updated.

Last update: 2024-09-07 01:58:27 UTC


README

此库维护了一个 SlabPHP 包的堆栈,并允许在框架内部实现一种多态性,同时管理 SlabPHP 所称的级联文件资源目录。

有关 SlabPHP 的更多信息以及这些库存在的原因,请参阅 SlabPHP 的主要文档。

安装

使用 composer 包含此包

composer require slabphp/bundle-stack

用法

初始化

请确保您的 SlabPHP 包配置对象存在。SlabPHP 为其默认 Bundle 提供了一个内置的配置。您应该使用该配置作为第一个配置,但如果您出于某种原因在此库非 SlabPHP 上下文中使用它,则不是必需的。

$stack = new \Slab\Bundle\Stack();

然后您可以为您创建的任何其他包推送包配置对象。

$stack
    ->pushBundle(new \SlabPHP\Configuration())
    ->pushBundle(new \My\Shared\Namespace\Configuration())
    ->pushBundle(new \My\Site\Configuration());

SlabPHP 提供了使用动态方式推送最终包配置的能力,例如使用 server_name。此逻辑不在此库中处理。

查找类

现在您可以使用您的包堆栈来定位合适的类。例如,如果您有一个二级共享包,您可以使其使用 findClass 或 findClassName 方法查询包堆栈。

例如,假设您的包堆栈如下所示

  • Slab - 默认底部包
  • Shared - 您的共享包
  • Example - 您的 example.com 网站包

您已经为它们创建了 Bundle 配置对象并构建了一个 $this->stack 对象。

继续此示例,假设您有一个 \Shared\Controllers\Article 类。在这个类内部,您执行以下操作

$object = $this->stack->findClass('Utilities\Calendar');

堆栈对象将首先查找 \Example\Utilities\Calendar,如果存在,则使用它,否则将检查 \Shared\Utilities\Calendar,最后将检查 \Slab\Utilities\Calendar,然后返回找到的类实例或 null。或者,如果您只需要名称的字符串表示,您也可以直接使用 findClassName。此功能依赖于先前配置的 autoloader(希望是 psr4)的存在。

缓存

所有内容都存储在本地线程唯一的内存缓存中。这将优化同一请求内的重复查找,但每次请求都必须重建。如果您发现这是问题,请考虑进行分支。