cw / tool
Requires
- itarato/var-check: 2.*@dev
- pimple/pimple: ~3.0
- symfony/yaml: ^3.1
Requires (Dev)
- psr/log: 1.0.0
- v3.x-dev
- v3.1.x-dev
- 2.x-dev
- dev-ES-add-entity-set
- dev-8.x-1.0
- dev-feature/ES-x-functional
- dev-feature/ES-entity-creator
- dev-autoload
- dev-remove-autoload
- dev-request-https-post-checkers
- dev-master
- dev-EIL-666-create-generic-block-render
- dev-EIL-707-adding-javascript-url-managers
- dev-EIL-759-added-imagecontroller-class
- dev-feature/EIL-759-added-imagecontroller-class
- dev-feature/PA-Any-all
- dev-user-role-checks
This package is not auto-updated.
Last update: 2024-09-14 18:25:54 UTC
README
它做什么?
CWTool 有两个主要目的。首先,它是一个覆盖 Drupal API 的结构化框架。其次,它是一个 PHP 和 Drupal 的辅助库。
为什么 Drupal 需要一个结构化框架?Drupal(尤其是第 7 版)在所有地方都使用关联数组,即使是它的更面向对象的部分也主要是松散耦合的弱对象。例如,节点是包含大量关联数组的普通 PHP 对象。与节点对象一起工作的方法是危险的且不可持续的。然而,将它们包装到控制器和模型中,可以为您提供一个定义良好的业务层和安全层。
另一个例子是表单。在旧式的 Drupal 项目中,表单在钩子和普通函数中定义和修改,几乎没有组织。表单类和表单扩展器可以帮助创建统一的类,并将冗余代码降到最低。
除了提供构建业务域的类之外,CWTool 还打算通过适配器提供 Drupal API,以增加业务层的可测试性。例如,实体 API 和变量处理是通过适配器完成的,这意味着 Drupal 实现只是单一版本,您可以在任何时候覆盖它。
CWTool 可能的另一个用途是通过服务容器为应用程序提供依赖注入。使用 DI 中的服务允许应用程序(和开发人员)切换和替换服务(如日志记录、变量处理、对象加载、缓存等),而不会带来太多麻烦。
CWTool 的实用部分是一个纯辅助函数库,通过减少冗余和易于出错的代码来加快开发速度。它提供了各种用于字符串、数组、日期、函数式风格代码等的实用工具。
CWTool 在通用 Drupal(7)应用程序中的常见用途
- 安装模块(带有依赖项)
- 创建一个专门的 app 模块(带有 composer + PSR4 自动加载)
- 实现 DI 的 服务容器钩子
- 使用 Drush 工具 生成所有节点、用户和分类控制器,并将其放入
src/Controller/<ENTITYTYPE>/<CONTROLLER>.php - 创建必要的模板处理器,并为每个创建 处理器类
- 实现 变量收集钩子 并添加所有应用程序变量
对于实用工具,最好是查看文档、测试和源代码,以查看可用的内容。如果您找不到您需要的:添加它、提交它并为其编写测试。
安装
- 将模块复制到模块文件夹
- 更好的是将它添加为 git 子模块
- 通过 Composer 更好:
composer require cw/tool
- 更新 Composer 依赖
- 在模块文件夹中执行
composer update
- 在模块文件夹中执行
- 启用 cw_tool 模块
drush en cw_tool
主要功能
Drush 命令
实体控制器类脚手架
创建用于引导的样板 PHP 类代码。
drush cwt-sc-ctrl node blog --namespace=My\\Namespace
通用开发指南
通过其控制器使用实体
实体应该有自己的控制器,并通过控制器工厂加载。
控制器应包含最基本的行为
控制器应包含数据访问和最基本的业务逻辑。控制器不应生成主题输出。控制器不应清理其内容。
控制器应保留字段名称(作为常量)、属性或状态常量。
对于额外的行为(如控制器渲染输出、表单等),应有一个专门的类实现 ControllerAware 或 ControllerContainer。
服务优于静态类
当需要包装功能的新类时,应首选新的服务。通常它们至少包含一个日志记录器。
参数对象优于数组
避免使用数组作为参数。改为使用参数对象。
始终使用可用的结构化类
- 对于新表单使用
FormBulider - 对于模板(预)处理器使用
AbstractThemeProcessor - 对于块使用
Block - 对于表单状态使用
FormState或NodeFormState
避免在钩子中使用代码
只保留到适当类的代理调用在钩子中,但不要有任何逻辑。
文档
执行 Doxygen 生成器
doxygen Doxygen
Doxygen 二进制文件是必需的。