locomotivemtl / charcoal-ui
UI 工具(仪表盘、布局、表单和菜单)
Requires
- php: >7.1
- locomotivemtl/charcoal-config: ~0.10
- locomotivemtl/charcoal-factory: ~0.4
- locomotivemtl/charcoal-translator: ~0.3
- locomotivemtl/charcoal-user: ~0.6
- locomotivemtl/charcoal-view: ~0.4
- psr/log: ^1.0
Requires (Dev)
- mustache/mustache: ^2.11
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^7.5
- pimple/pimple: ^3.0
- squizlabs/php_codesniffer: ^3.3
- tedivm/stash: ~0.14
Suggests
- pimple/pimple: DI Container to register the various Service Providers.
- dev-master / 0.3.x-dev
- 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-06 23:52:22 UTC
README
Charcoal\Ui
模块提供从简单的元数据/配置创建 UI 元素(仪表盘、布局、表单和菜单)的工具。
目录
如何安装
首选(也是唯一支持)的 charcoal-ui 安装方式是使用 composer
$ composer require locomotivemtl/charcoal-ui
依赖项
- PHP 7.1+
psr/log
- 应该为各种服务/类提供一个符合 PSR-3 规范的日志记录器。
locomotivemtl/charcoal-config
0.6+- UI 对象可以通过各种配置进行 配置。
locomotivemtl/charcoal-translation
- 为 UI 对象提供本地化。
locomotivemtl/charcoal-view
0.1+- 基本的
UiItem
是可查看的
,这意味着它们可以用View
进行渲染。
- 基本的
示例用法
表单
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();
基本 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()
布局感知对象
在 charcoal-ui
模块中,3 个基本对象使用布局:仪表盘、表单 和 表单组。
这些类通过实现\Charcoal\Ui\Layout\LayoutAwareInterface
并使用相应的LayoutAwareTrait
来实现布局要求。
表单
表单定义了表单组的布局、表单选项、数据和元数据。
表单配置
表单依赖项
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()
表单输入
form
label
property_ident
template_ident
template_data
read_only
required
disabled
multiple
input_id
input_name
菜单
菜单项
菜单项定义了菜单级别(标识、标签和URL)及其子项(菜单项数组)。
菜单项配置
ident
icon_ident
label
url
children
菜单项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
命名空间中提供,以方便使用。它们是推荐使用charcoal-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
- 注册所有其他服务提供商(仪表板、表单、布局和菜单)。
必需的服务
有一些外部服务的依赖关系,应在传递给服务提供商的相同DI容器中设置
logger
,PSR-3日志实例。- 通常来自
charcoal-app
的monolog
实例。
- 通常来自
view
,一个\Charcoal\View\ViewInterface
实例。- 通常由
\Charcoal\App\Provider\ViewServiceProvider
提供。
- 通常由
开发
安装开发环境
$ composer install --prefer-source
API 文档
- 自动生成的
phpDocumentor
API 文档可在以下链接找到:https://locomotivemtl.github.io/charcoal-ui/docs/master/ - 自动生成的
apigen
API 文档可在以下链接找到:https://codedoc.pub/locomotivemtl/charcoal-ui/master/
开发依赖项
phpunit/phpunit
squizlabs/php_codesniffer
satooshi/php-coveralls
持续集成
编码风格
Charcoal-Ui 模块遵循 Charcoal 编码风格
- PSR-1
- PSR-2
- PSR-4,因此自动加载由 Composer 提供。
- phpDocumentor 注释。
- 阅读 phpcs.xml 文件以获取有关代码样式的所有详细信息。
可以使用
composer phpcs
执行编码风格验证/执行。还可以使用composer phpcbf
使用自动修复器。
作者
- Mathieu Ducharme mat@locomotive.ca
许可证
Charcoal 采用 MIT 许可证。有关详细信息,请参阅 LICENSE。