fullscreeninteractive / silverstripe-manyfield
SilverStripe 表单字段,用于向表单添加动态数据。
1.0.2
2022-03-24 21:52 UTC
Requires
Requires (Dev)
- phpunit/phpunit: ^5.7
README
一种可重用的表单字段方法,允许你在自定义构建的表单或用户表单中创建和删除行。
此设计适用于前端,使用有限的 JavaScript(即它不需要 GridField
或 entwine)。
每一行可以关联一个 DataObject 子类,或者简单地用作捕获数据的数组。
安装
composer require fullscreeninteractive/silverstripe-manyfield
使用方法
use FullscreenInteractive\ManyField\ManyField; $fields = new FieldList( $many = ManyField::create('SwabList', [ TextField::create('Swab'), TextField::create('TestSite'), TextField::create('Description'), TextField::create('Material') ]) );
数据将被保存为 setSwabList($data)
、SwabList
数据库字段或 SwabList
关系。如果你正在将数据保存到如 HasMany
或 ManyMany
列表的关系中,请确保在你的字段列表中包含一个隐藏字段。
$many = ManyField::create('SwabList', [
HiddenField::create('ID', ''),
TextField::create('Swab'),
TextField::create('TestSite'),
TextField::create('Description'),
TextField::create('Material')
]);
排序
包含一个隐藏字段 Sort
并确保已启用排序。
$many = ManyField::create('SwabList', [
HiddenField::create('ID', ''),
HiddenField::create('Sort', ''),
TextField::create('TestSite')
])->setCanSort(true);
必填字段
$many = ManyField::create('SwabList', [
TextField::create('TestSite')->setRequired(true)
])->setCanSort(true);
JavaScript 事件
如果你有 UI 处理器需要在字段添加或删除时运行(例如日期选择器),在你的 <body>
元素上创建一个处理器,并监听以下事件:
manyFieldAdded
manyFieldRemoved
常见问题解答
当我使用这个与文件字段一起使用时,我没有上传文件?
确保你的表单编码设置为正确的 MIME 类型。
$form->setEncType(Form::ENC_TYPE_MULTIPART);
许可证
BSD 3-Clause License