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. 问题描述?
我现在想做一个商城,问题所在位置是商城“规格”部分:
页面大概是这个样子!
规格内容,是点击添加按钮,动态添加的。现在遇到了这么几个问题:
1.工具表单 (Dcat\Admin\Widgets\Form)
工具表单能够代替原来的控制器Controller中的form方法来应用在funciton create()和funciton edit()中么?
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('新建商品');
}
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));
}
Dcat Admin
它的 admin 模块的控制器都是继承于:Dcat\Admin\Http\Controllers\AdminController
这个基类。create()
和edit()
这两个方法用来渲染创建页面
和修改页面
的 form 表单。还有store()
和update()
方法分别是用来获取创建页面
和修改页面
form表单提交的数据并处理逻辑的。create()
和edit()
方法里面的链式代码中 body 里用的都是 $this->form(), 所以你问的是否可以用自己的文件是否可以替代,原先控制器就有的 form() 这个问题答案是,必须可以替代的。Goods_detail::make()
,使用这个表单来处理数据回显,和数据提交就行。如果不想自定义页面,可以在form方法里面写JS代码实现添加规格动态更新