charcoal / ui
UI 工具(仪表板、布局、表单和菜单)
Requires
- php: ^7.4 || ^8.0
- charcoal/config: ^5.0
- charcoal/factory: ^5.0
- charcoal/translator: ^5.0
- charcoal/user: ^5.0
- charcoal/view: ^5.0
- psr/log: ^1.0
Requires (Dev)
- charcoal/app: ^5.0
- mustache/mustache: ^2.11
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^9.5
- pimple/pimple: ^3.0
- squizlabs/php_codesniffer: ^3.5
- tedivm/stash: ~0.16
Suggests
- pimple/pimple: DI Container to register the various Service Providers.
Replaces
- dev-main / 5.x-dev
- v5.0.0
- v4.1.0
- v4.0.8
- v4.0.7
- v4.0.6
- v4.0.5
- v4.0.4
- v4.0.2
- v4.0.1
- v4.0.0
- v3.1.8
- v3.1.7
- v3.1.6
- v3.1.5
- v3.1.4
- v3.1.3
- v3.1.2
- v3.1.1
- v3.1.0
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.2
- 0.3.13.1
- 0.3.13
- 0.3.12
- 0.3.11
- 0.3.10.1
- 0.3.10
- 0.3.9
- 0.3.8.2
- 0.3.8.1
- 0.3.8
- 0.3.7
- 0.3.6
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3
- 0.2.10
- 0.2.9
- 0.2.8
- 0.2.7
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1
- dev-feature/camelizePropertiesAndUseArrayAccess
- dev-acl-manager-refactor
- dev-mcaskill-patch-view
- dev-mcaskill-form-view
- dev-mcaskill-labeller
This package is auto-updated.
Last update: 2024-09-13 16:26:55 UTC
README
UI 包提供了创建用户界面元素的抽象工具。
安装
composer require charcoal/ui
对于 Charcoal 项目,服务提供者可以从您的配置文件中注册
{ "service_providers": { "charcoal/ui/service-provider/ui": {} } }
示例
use Charcoal\Config\GenericMetadata; use Charcoal\Ui\Form\FormBuilder; use Charcoal\Ui\Form\FormFactory; $metadata = new GenericMetadata([ 'properties' => [ 'first_name' => [ 'type' => 'string', ], 'last_name' => [ 'type' => 'string', ], 'email' => [ 'type' => 'email', ], ], ]); $formData = [ 'first_name' => 'Mathieu', 'last_name' => 'Ducharme', 'email' => 'mat@locomotive.ca', ]; $formConfig = [ 'type' => 'charcoal/ui/form/generic' 'template_ident' => 'foo/bar/form', 'template_data' => [], 'label' => 'Example Form', 'groups' => [ 'info' => [ 'layout' => [ 'structure' => [ 'columns' => [ [ 1, 1 ], [ 1 ], ], ], ], 'properties' => [ 'first_name', 'last_name', 'email', ], ], ], ]; $formBuilder = new FormBuilder([ 'form_factory' => new FormFactory(), 'view' => $container['view'], ]); $form = $formBuilder->build($formConfig); $form->setMetadata($metadata); $form->setFormData($formData); echo $form->render();
API
基本 UI 元素
所有 UI 类都实现了相同的基本类:\Charcoal\Ui\UiItemInterface
。此接口定义了一组基本属性,这些属性在(几乎)所有 UI 元素类型之间共享。
基本 UI 元素配置
注意
- [1] 表示多语言字符串(
TranslationString
)。
视图集成
UiItemInterface
是一个 可查看 元素;这意味着它还实现了 \Charcoal\View\ViewableInterface
。通过使用 \Charcoal\View\ViewableTrait
,AbstractUiItem
完全实现了此接口。
可查看 对象可以通过 setView($view)
设置一个 视图 对象,并有一个 template_ident
(可以通过 setTemplateIdent($id)
设置)。有关详细信息,请参阅 charcoal/view 模块。
使用视图的最简单方法是设置一个 ViewInterface
对象作为 DI 容器/服务提供者上的 view
服务。
仪表板
仪表板定义了 小部件 的 布局。
layout
是一个LayoutInterface
对象,可以使用LayoutBuilder
创建。widgets
是任何UiItemInterface
对象的集合。- 任何 PHP 类实际上都可以是一个 "小部件",但基本小部件已经提供作为便利。
仪表板配置
仪表板依赖项
logger
view
widget_factory
仪表板 API
setLayout()
layout()
setWidgets(array $widgets)
widgets()
addWidget()
numWidgets()
hasWidget()
布局
布局定义了一个网格(基于列)结构。
布局配置
示例布局 JSON 配置
"layout": { "structure": [ { "columns": [ 2, 1 ] }, { "columns": [ 1 ] }, { "columns": [ 1 ] } ] }
布局 API
setStructure(array $layouts)
structure()
numRows()
rowIndex($position = null)
rowData($position = null)
rowNumColumns($position = null)
rowNumCells($position = null)
rowFirstCellIndex($position = null)
cellRowIndex($position = null)
numCellsTotal()
cellSpan($position = null)
cellSpanBy12($position = null)
cellStartsRow($position = null)
cellEndsRow($position = null)
start()
end()
布局感知对象
UI 包有三个基本对象使用布局:仪表板、表单 和 表单组。
这些类通过使用相应的 LayoutAwareTrait
实现了 \Charcoal\Ui\Layout\LayoutAwareInterface
来满足布局需求。
表单
表单定义了表单组、表单选项、数据和元数据的布局。
表单配置
表单依赖项
view
group_factory
表单 API
setAction($action)
action()
setMethod($method)
method()
setGroups(array $groups)
groups()
addGroup($groupIdent, $groupData)
numGroups()
hasGroups()
setFormData(array $formData)
formData()
addFormData()
表单组
表单组配置
表单组 API
setForm($form)
setInputs(array $groups)
inputs()
addInput($inputIdent, $inputData)
numInputs()
hasInputs()
表单输入
表单
标签
属性标识
模板标识
模板数据
只读
必填
禁用
多选
输入ID
输入名称
菜单
菜单项
菜单项定义了一个菜单级别(标识、标签和URL)及其子菜单(菜单项数组)。
菜单项配置
标识
图标标识
标签
URL
子菜单
菜单项API
setIdent($ident)
ident()
setLabel($label)
label()
setUrl($url)
url()
setChildren($children)
children()
numChildren()
hasChildren()
创建辅助工具
大多数UI元素都非常动态。要创建的对象类型通常从配置对象中的字符串中读取。因此,工厂是实例化新UI元素的首选方式。
UI元素之间也存在许多相互关联的依赖关系。因此,应该使用构建器进行对象创建/实例化。它们在内部使用工厂,并有一个build($opts)
方法,允许从动态源检索类名,执行初始化、依赖关系管理等。构建器需要Pimple
进行DI容器。
工厂
\Charcoal\Ui\Dashboard\DashboardFactory
\Charcoal\Ui\Layout\LayoutFactory
\Charcoal\Ui\Form\FormFactory
\Charcoal\Ui\FormGroup\FormGroupFactory
\Charcoal\Ui\FormInput\FormInputFactory
\Charcoal\Ui\Menu\MenuFactory
\Charcoal\Ui\MenuItem\MenuItemFactory
构建器
\Charcoal\Ui\Dashboard\DashboardBuilder
\Charcoal\Ui\Layout\LayoutBuilder
\Charcoal\Ui\Form\FormBuilder
\Charcoal\Ui\FormGroup\FormGroupBuilder
\Charcoal\Ui\FormInput\FormInputBuilder
\Charcoal\Ui\Menu\MenuBuilder
\Charcoal\Ui\MenuItem\MenuItemBuilder
服务提供商
服务提供商在Charcoal\Ui\ServiceProvider
命名空间中提供,以方便使用。它们是使用UI包的推荐方式,因为它们将所有创建实用工具注册到容器中,并处理依赖关系。
\Charcoal\Ui\ServiceProvider\DashboardServiceProvider
dashboard/factory
dashboard/builder
\Charcoal\Ui\ServiceProvider\FormServiceProvider
form/factory
form/builder
form/group/factory
form/input/factory
form/input/builder
\Charcoal\Ui\ServiceProvider\LayoutServiceProvider
layout/factory
layout/builder
\Charcoal\Ui\ServiceProvider\MenuServiceProvider
menu/factory
menu/builder
menu/item/factory
menu/item/builder
\Charcoal\Ui\ServiceProvider\UiServiceProvider
- 注册所有其他服务提供商(仪表板、表单、布局和菜单)。
资源
- 贡献
- 报告问题 和 发送拉取请求 在 主Charcoal存储库