brain/brain

此包已被弃用且不再维护。没有建议的替代包。

WordPress 的 Pimple 包装器

维护者

详细信息

github.com/gmazzap/Brain

源代码

问题

安装: 2,506

依赖: 5

建议者: 0

安全: 0

星标: 21

关注者: 3

分支: 0

0.1.1 2016-02-23 17:21 UTC

This package is auto-updated.

Last update: 2023-02-26 11:02:48 UTC


README

Brain 是 WordPress 的简单 Pimple 包装器。

它是 Brain 项目 的基础包。

要在容器中注册参数和服务,您应该创建一个 模块,即实现 Brain\Module 接口的一个类。

此接口由 3 个方法组成

  1. getBindings 接收当前容器作为参数,用于注册服务和参数
  2. boot 用于启动模块,即运行一次就应该执行的操作。方法接收当前容器作为参数,因此可以在启动时执行一些操作。
  3. getPath 应返回模块文件夹的绝对路径

要注册模块,应使用容器的 addModule 方法,但 仅使用 'brain_init' 钩子

当所有模块都已加载时,将触发 'brain_loaded' 钩子。

##使用示例##

###首先定义一个服务###

class FooService {

  function foo( $foo = '' ) {
    echo '<p>Foo is ' . $foo . '</p>';
  }

}

###然后定义一个 Brain 模块###

class FooModule implements Brain\Module {

  function getBindings( Brain\Container $brain ) {
    $brain['foo'] = 'bar';
    $brain['foo_service'] = function() { return new FooService; };
  }

  function boot( Brain\Container $brain ) {
    add_action( 'loop_start', function() use( $brain ) {
      $brain['foo_service']->foo( $brain['foo'] );
    });
  }

  function getPath() {
    return dirname( __FILE__ );
  }
}

###最后将模块添加到 Brain###

add_action( 'brain_init', function( $brain ) {
  $brain->addModule( new FooModule );
});

有关更多信息,请参阅 Pimple 文档

###从 Brain 获取数据###

要获取注册的服务,可以使用 Brain::instance() 静态方法和 Pimple 的数组访问方法,例如

$brain = Brain::instance();
$foo_service = $brain['foo_service'];

或者可以使用 Brain 的 get 方法,在将其与 instance 方法链式调用时,就像这样

$foo_service = Brain::instance()->get('foo_service');

##安装##

应通过 Composer 安装此包。Brain 通过 packagist 提供,因此您只需在您的 composer.json 中添加 require 设置。例如

"require": {
    "php": ">=5.4",
    "brain/brain": "dev-master"
}

无需显式要求 Pimple,因为 Brain 会为您要求。之后只需

$ composer install

您就完成了。有关更多信息,请参阅 Composer 文档

###关于 PHP 版本的问题###

Pimple 支持 PHP 5.3+,然而我不想再支持那个版本了,因此即使(可能)Brain 的当前版本与 PHP 5.3 兼容,也可能在未来某个版本中不兼容,我永远不会对其进行测试。

##相关的 WordPress 钩子##

Brain 本身及其模块在 'after_setup_theme' 上初始化,优先级为 0,这是一个合理的早期钩子,可以在插件和主题中使用。与 Brain 相关的钩子有

  • 'brain_init' 用于注册模块(见上文)
  • 'brain_loaded' 当所有模块都已加载时触发
  • 使用优先级 >= 1 的 'after_setup_theme'(或任何后续钩子)从容器获取数据