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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!