dartanian300 / xmodule-php
Modo Lab 的 Xmodule 规范的 PHP 实现
v1.2.0
2019-09-18 12:31 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- phpdocumentor/phpdocumentor: 2.*
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2024-09-20 03:40:48 UTC
README
一个用于实现 Modo Lab 的 XModule 网络服务的 PHP 库。
此库尽可能遵循 XModule v1.0 规范。除非另有说明,否则每个元素都可以通过它们的名称(从规范中)的驼峰式版本进行实例化。为了最简单的使用,在使用此库时请参考规范(同时记住以下“注意事项”)。
安装方法
$ composer require dartanian300/xmodule-php
确保包含 Composer 的自动加载器
require(__DIR__.'/vendor/autoload.php');
使用这些元素一起创建您的 XModule 响应
// Create root response element $response = new XModuleResponse(); // Create content elements $container = new ButtonContainer(); $button = new LinkButton(); $button->title->set("Click Me"); $container->add($button); // Add elements to root response element $response->add($container); // Print JSON response echo json_encode($response);
一些注意事项
- 所有元素在调用
json_encode()
时将检查所需字段。如果缺少字段,将抛出异常。 - 使用预定义值的字符串字段通过将值作为函数设置(例如 - 将
actionType
设置为 'constructive':$linkBbutton->actionType->constructive()
) - 通过
set()
和get()
访问的自定义字符串字段 - 通过
get()
、true()
和false()
访问的布尔字段 - 通常通过
add()
、get()
、delete()
(如果多个数组,则附加驼峰式属性名称)访问数组字段 elementType
和inputType
字段会自动设置
入门示例
访问/设置预定义字符串字段
$collapsible = new Collapsible(); $collapsible->disclosureIcon->plusminus(); $collapsible->disclosureIcon->get();
访问/设置自定义字符串字段
$collapsible = new Collapsible(); $collapsible->title->set("I'm a collapsible title!"); $collapsible->title->get();
访问/设置布尔字段
$collapsible = new Collapsible(); $collapsible->collapsed->true(); $collapsible->collapsed->get();
访问/设置/删除数组字段
$collapsible = new Collapsible(); $img = new Image(); $img->url->set('http://...'); $collapsible->add($img); $collapsible->get(0); $collapsible->delete(0);
访问/设置/删除对象字段
$container = new Container(); $container->margins->responsive(); $detail = new Detail(); $detail->thumbnail->url->set('http://...'); $detail->thumbnail->crop->true();
访问/设置 id 字段
$collapsible = new Collapsible('collapse1'); // OR $collapsible = new Collapsible(); $collapsible->setId('collapse1');
注意:ids 只能在支持它的元素上设置
访问 elementType 字段
$collapsible = new Collapsible(); $collapsible->getElementType();
更多示例
使用具有多个数组字段的元素
$table = new Table(); $row = new \XModule\Helpers\Row(); $table->addRow($row); $table->getRow(0); $table->deleteRow(0); $columnOption = new \XModule\Helpers\ColumnOption(); $table->addColumnOption($columnOption); $table->getColumnOption(0); $table->deleteColumnOption(0);
使用表单
// Create root response element $response = new XModuleResponse(); // Create root form element $form = new Form(); $form->relativePath->set('./'); // Create inputs $nameInput = new TextInput(); $nameInput->name->set("first-name"); $nameInput->label->set("First Name"); $selectState = new SelectMenu(); $selectState->name->set("state"); $selectState->label->set("State"); $optionLabels = ['New York', 'Georgia', 'California']; $optionValues = ['NY', 'GA', 'CA']; $selectState->addOptionLabel($optionLabels); $selectState->addOptionValue($optionValues); // OR store in associative array //$optionValues = [ // //label - value // 'New York' => 'NY', // 'Georgia' => 'GA', // 'California' => 'CA' //]; //foreach($optionValues as $label => $value){ // $selectState->addOptionLabel($label); // $selectState->addOptionValue($value); //} $comments = new TextArea(); $comments->name->set('comments'); $comments->label->set('Comments'); // Add fields to form $form->add([$nameInput, $selectState, $comments]); // Add form to root response element $response->add($form); // Print JSON response echo json_encode($response);
使用 MultiColumn
// Create root response element $response = new XModuleResponse(); // Create multicolumn element $columns = new MultiColumn(2); // Create content $text = new Detail(); $text->title->set('Welcome'); $text->body->set('<p>See to the right</p>'); $image = new Image(); $image->url->set('https://image.shutterstock.com/image-photo/large-beautiful-drops-transparent-rain-260nw-668593321.jpg'); // Add content to multicolumn $columns->add(0, $text); $columns->add(1, $image); // Add multicolumn to root response element $response->add($columns); // Print JSON response echo json_encode($response);
一些异常
一些字段/元素使用修改后的 add()
方法。请参阅以下签名
ProgressiveDisclosureItems
和QueryParameters
字段:add($key, $element)
.MultiColumn
元素:add($columnNum, $element)
.
更多文档
在运行以下命令后,可以通过在浏览器中导航到 docs
文件夹来找到更多文档
$ composer make-docs
注意:假设 PHPDoc 已安装在项目的 'vendor' 文件夹中,并且您正在基于 Unix 的系统上执行。命令可能需要修改才能在 Windows 系统上工作(位于
composer.json
中)。
元素参考
可用的顶级元素
- 根元素: XModuleResponse
- AutoUpdateAccessibility
- ButtonContainer
- Carousel
- Collapsible
- Container
- Detail
- GoogleMap
- Grid
- Heading
- HTML
- Image
- Link
- LinkButton
- LoadingIndicator
- MultiColumn
- Portlet
- Table
- Tabs
- Toolbar
- ToolbarContent
- XList(由于在 PHP 中是保留字,因此从规范中的 List 重命名为 XList)
可用的表单元素
- 根元素: Form
- Checkbox
- FormButton
- HiddenField
- Label
- Password
- Phone
- RadioButtons
- SelectMenu
- TextArea
- TextInput
- Upload
可用的 GoogleMaps 元素(命名空间:XModule\GoogleMaps)
- MapPoint
- MapPolygon
- MapPolyline
- Point
(命名空间:XModule\GoogleMaps\MapPoint)
- Anchor
- Icon
- Size
可用的 Toolbar 元素(命名空间:XModule\Toolbar)
- MenuItem
- 工具栏按钮
- 工具栏标签
- 工具栏菜单
可用辅助元素(命名空间:XModule\Helpers)
与Table
一起使用
- 列选项
- 行
- 单元格
与Carousel
一起使用
- 轮播项目
与Grid
一起使用
- 网格项
与XList
一起使用
- 列表项
与Tabs
一起使用
- 选项卡
尚未实现的概念
GoogleMap
中的动态标记字段- X组件