讨论 技术讨论 ModStartBlog快捷CRUD,curd方法里面如何获取编辑操作的id

ModStartBlog快捷CRUD,curd方法里面如何获取编辑操作的id

sigool 发表于    阅读:67    回复:1

问题描述:

ModStartBlog快捷CRUD,curd方法里面如何获取编辑操作的id?

环境信息:

ModStartBlog 稳定版 v10.0.0       PHP:7.0.9 版本

问题详细描述:


快捷CURD,我知道要写个 

protected function crud(AdminCRUDBuilder $builder) {}

这样的方法,具体逻辑写里面可以了。但是有时候面对是编辑操作时候,我想要获取操作的ID呢?

比如:


6896_rcvw_6859.png

我这个total_amountJs不是存在的表的字段来的,所以我故意渲染成html组件。

而对于modstart来说html组件也是属于LayoutField(打开\ModStart\Field\Html 可以看到 isLayoutField 属性的确为true)来的

LayoutField即modstart渲染成grid的时候不会列出这列。

但是渲染成form(包含add和edit)时就不一样了,它会参与的。

我就想edit操作的时候,拿到对应这条记录的ID,将这个id写进这个组件的具体HTML内容里。



所以就是说我们想在 protected function crud(AdminCRUDBuilder $builder) {} 这个方法里,

是如何知道是编辑操作,如何在里面任意地方拿到对应的该编辑记录ID呢?

方法:

$editId = null;
if (Route::currentRouteAction() == '\\' . self::class . '@edit')
   $editId = CRUDUtil::id();

我们只需要判断这个请求是路由到我们当前这个crud控制器的edit操作即可。

因为,打开编辑页面是GET请求,提交编辑数据是POST请求都是请求这个edit操作的。

代码里的Route就是 laravel框架的 \Illuminate\Support\Facades\Route   

Route::currentRouteAction()

这个方法就是获取当前请求的路由操作的,返回给我们的格式就是:  xx控制器@xx操作名

$editId = CRUDUtil::id();

而  CRUDUtil::id() 是modstart封装给我们的用于获取编辑记录ID的,CRUDUtil类具体为:\ModStart\Core\Util\CRUDUtil。

我们打开modstart封装给我们的这个方法看看



可以看到它要么从我们 _id 键名里获取,要么从id键名里获取。具体什么意思呢?

其实就是这样的。

从我这个截图右下方捕获的请求URL上可以看到,如果是打开编辑页面(即GET请求),可以看到的确ID是以_id键名附加在query string

上的。所以这也就为啥可以先从 _id键名获取。

那_id键名获取不到,就从id键呢?是的,估计你猜到就是POST请求时候的,如果是提交编辑数据了,提交的编辑数据会附带一个id键

名的项,这个项就是该编辑记录的ID。

这也就解释为啥modstart要先从_id获取不成又成id获取了,就是为了兼容可能是打开编辑页面或者是提交编辑数据。

后面的提交表单会带上id我就不测试给截图了。


当然你不要做判断也可以,你可以直接用modstart封装的这个 

CRUDUtil::id()
方法直接获取编辑ID,只不过如果是grid或者add时候,因为获取不到_id和id,

看源码这个方法应该会返回默认值0,所以你也是要判断,如果返回的值大于0就才是真正编辑操作,

否则为0的就肯定不是编辑操作。具体用哪种方法,青菜萝卜,各有所爱


评论
ModStart 官方

赞 👍

 
1
我来评论
QQ
微信
客服

.