slabphp / bundle-stack
SlabPHP Bundle Stack 管理库
Requires
- psr/log: ^1.0
- slabphp/component-interfaces: ^0.2
Requires (Dev)
- phpunit/phpunit: ^6.5
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)的存在。
缓存
所有内容都存储在本地线程唯一的内存缓存中。这将优化同一请求内的重复查找,但每次请求都必须重建。如果您发现这是问题,请考虑进行分支。