Dcat 动态表单字段的使用
表单
protected function form(): Form
{
return Form::make(new PageSetting(), static function (Form $form) {
$form->display('id');
$form->text('key', '设置名称')->required();
$form->radio('type', '设置类型')->customFormat(function ($type) {
return $type->value;
})->when(PageSettingsType::Text, function (Form $form) {
$form->text('text');
})->when(PageSettingsType::Textarea, function (Form $form) {
$form->editor('textarea', '文本');
})->when(PageSettingsType::Image, function (Form $form) {
$form->multipleImage('image', '多图上传')->disk('public')->move('image/page_setting/'. date('Y-m-d'))->uniqueName()->removable()->autoUpload();
})->options(PageSettingsType::getOptions())->default(PageSettingsType::Text, true)->required();
$form->display('created_at');
$form->display('updated_at');
});
}
表格
protected function grid(): Grid
{
return Grid::make(new PageSetting(), static function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('key');
$grid->column('type')->display(function ($type) {
return $type->description;
});
$grid->column('value')->if(function () {
return (int) $this->type->value === PageSettingsType::Textarea;
})->display(function () {
return $this->textarea ? '点击查看' : '暂无文本内容';
})->modal('内容', function () {
return Markdown::make($this->textarea);
})->if(function () {
return (int) $this->type->value === PageSettingsType::Text;
})->display(function () {
return $this->text ?: '暂无内容';
})->if(function () {
return (int) $this->type->value === PageSettingsType::Image;
})->display(function () {
return $this->image ?: '暂无图片';
})->image(null, 200, 50);
$grid->column('created_at');
$grid->column('updated_at')->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
详情
protected function detail($id): Show
{
return Show::make($id, new PageSetting(), static function (Show $show) {
$show->id('ID');
$show->key('名称');
$show->type('类型')->as(function ($type) {
return $type->description;
});
if($show->model()->type->value === PageSettingsType::Textarea) {
$show->textarea('内容')->unescape()->as(function ($textarea) {
return $textarea ? Markdown::make($textarea) : '暂无内容';
});
} else if ($show->model()->type->value === PageSettingsType::Text) {
$show->value('内容');
} else if ($show->model()->type->value === PageSettingsType::Image) {
$show->image('图片')->image(null, 200, 50);
}
$show->field('created_at');
$show->field('updated_at');
});
}
一点理解
- 表单,处理的是纯页面属性:所以要用通过代码修改页面这种方式去看待。
- 表格,先处理页面属性,后填充数据:所以要知道先有页面属性,才有数据填充。
- 详情,数据处理:所以,直接搞,用处理数据的方式直接去处理。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: