Dcat Admin中,关于form的动态显示以及表单工具的使用,遇到一些疑问

1. 运行环境

windows 11

1). 当前使用的 Laravel 版本?

Laravel Framework 7.30.6

2). 当前使用的 php/php-fpm 版本?

PHP 版本:8.0

3). 当前系统

Windows 11

4). 业务环境

本地开方环境

5). 相关软件版本

Nginx/mysql/php8.0

2. 问题描述?

我现在想做一个商城,问题所在位置是商城“规格”部分:

Laravel

页面大概是这个样子!
规格内容,是点击添加按钮,动态添加的。现在遇到了这么几个问题:
1.工具表单 (Dcat\Admin\Widgets\Form)
工具表单能够代替原来的控制器Controller中的form方法来应用在funciton create()和funciton edit()中么?

Laravel

 public function create(Content $content)
    {
        Admin::script(
            <<<JS
                $(document).on('click','.add-spec',function(){
                    Dcat.success('更新成功');
                });
JS
        );
        $content
            ->title('新建商品')
            ->description('新建商品')
            ->body(new Card(Goods_detail::make()));
        return $content
            ->header('新建商品');
    }

Laravel

public function edit($id, Content $content)
    {
        $goods = (new ShoppingGood)->getGood($id);
        return $content
            ->header('修改商品-'.$goods->spu)
            ->description($goods->desc)
            ->body(Goods_detail::make());
    }

2.因为规格是动态添加的,所以编辑页面的时候,肯定希望创建的规格再显示出来。按着之前的普通的处理办法,肯定是控制器获取数据,然后在view页面循环输出显示内容。但是如果是使用Dcat的form功能,这块该如何处理呢?我看现在的编辑功能,应该是传了id以后,系统把数据库中查出的表数据,和form的字段对应,匹配值,但是我现在需要的业务逻辑显然要比这个复杂,我的数据来源于多个表(完整规格保存于多个表,每个表记录规格的不同信息),肯定需要一些我自己的业务逻辑处理,这块逻辑代码,应该写在哪里呢?要抛弃

public function update($id)
    {
        return $this->form()->update($id);
    }

这样的写法,自己在update中处理逻辑,通过model进行数据的更新保存么?
3.对于Dcat来说,其中的form,我可以动态显示内容么?就比如,我现在创建了“颜色”,“尺码”两个规格,保存之后,编辑的时候,我希望页面显示出这两个规格的信息,还是说,我必须自定义个view页面,才能实现这个功能呢```php
public function edit($id, Content $content)
{
$goods = (new ShoppingGood)->getGood($id);
return $content
->header(‘修改商品-‘.$goods->spu)
->description($goods->desc)
->body($this->form()->edit($id));
}

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
laravel_peng
  1. 首先 Dcat Admin 它的 admin 模块的控制器都是继承于:Dcat\Admin\Http\Controllers\AdminController 这个基类。
  2. 基类里面有 create()edit() 这两个方法用来渲染 创建页面修改页面的 form 表单。还有store()update() 方法分别是用来获取 创建页面修改页面 form表单提交的数据并处理逻辑的。
  3. create()edit() 方法里面的链式代码中 body 里用的都是 $this->form(), 所以你问的是否可以用自己的文件是否可以替代,原先控制器就有的 form() 这个问题答案是,必须可以替代的。
  4. body 里面你使用自定义的 form 表单 Goods_detail::make() ,使用这个表单来处理数据回显,和数据提交就行。
2年前 评论

如果不想自定义页面,可以在form方法里面写JS代码实现添加规格动态更新

2年前 评论

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