lionsad/service_container

基于CTools插件和Symfony集成的服务容器

1.0.0-beta5 2015-07-16 14:02 UTC

This package is auto-updated.

Last update: 2024-09-17 03:39:13 UTC


README

版本

Latest Stable Version Total Downloads Latest Unstable Version License

Service Container是一个基于ctools的API模块,用于实现一个轻量级的服务容器,支持100%的单元测试覆盖率,适用于Drupal 7。

它的语法与Symfony容器非常相似,但它是从头开始编写的,因为不需要symfony依赖项 - 直接使用了一些Drupal 8核心和组件。它们未来可能会依赖于drupal8core项目 - 但目前代码是可行的。

这允许使用可扩展的服务容器(如Drupal 8中)并在Drupal 7中编写模块,就像它们在使用Drupal 8一样。

主要好处是能够使用单元测试,同时也可以考虑用Drupal 8的编码风格来编写Drupal 7模块。

该模块使用PHP Unit和travis.yml,但测试和composer.json被隔离在tests/目录中,所以默认情况下不需要vendor或composer的多映射。

最初是为render_cache模块编写的,但此后其他人表示有兴趣使用它,因此将其分割出来,并将其作为render_cache的依赖项。

您需要

或任何其他PSR-4自动加载器。

注册CTools插件

默认情况下,service_container支持CTools发现,要注册您的插件,您只需要做以下操作

    $parameters['ctools_plugins_auto_discovery']['render_cache'] = TRUE

然后您可以通过以下方式获取插件

    $rcc = \Drupal::service('render_cache.controller')->createInstance('block');

因为插件管理器实现了整个发现接口,您可以轻松地获取所有定义。

  $plugins = \Drupal::service('render_cache.controller')->getDefinitions();

您的插件本身看起来像

cat modules/render_cache_block/src/RenderCache/Controller/block.inc

$plugin = array(
  'class' => "\\Drupal\\render_cache_block\\RenderCache\\Controller\\BlockController",
  'arguments' => array('@render_stack', '@render_cache.cache'),
);

因此您可以使用正常的容器参数语法。

提供以下服务

  • module handler ('module_handler') 和 module installer ('module_installer')
  • service container ('service_container')
  • database ('database')
  • key value store ('keyvalue', 'keyvalue.database')
  • variable,variable_get() / variable_set()的包装器
  • A lock ('lock')
  • A wrapper for url() / l() ('url_generator', 'link_generator')
  • Flood,flood机制的包装器
  • Messenger,显示消息的包装器
  • Drupal 7 Legacy,访问Drupal 7遗留函数的包装器。
  • 更多内容即将到来...

测试

  • service_container 通过 PHPUnit 进行代码正确性测试。 (运行 ./tests/run-tests.sh)
  • service_container 通过 simpletest 与 Drupal 进行集成测试。 (运行 ./tests/run-simpletests.sh)
  • service_container 通过 PHPUnit 进行代码覆盖率测试。 (运行 ./tests/run-coverage.sh)

我们修改过的 Drupal 8 核心服务列表

更多详细信息请参阅 HACK.md 文件。

使用此模块的模块示例