.
QQ扫一扫联系
ModStartBlog快捷CRUD,curd方法里面如何获取编辑操作的id?
ModStartBlog 稳定版 v10.0.0 PHP:7.0.9 版本
快捷CURD,我知道要写个
protected function crud(AdminCRUDBuilder $builder) {} 这样的方法,具体逻辑写里面可以了。但是有时候面对是编辑操作时候,我想要获取操作的ID呢? 比如:
我这个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的就肯定不是编辑操作。具体用哪种方法,青菜萝卜,各有所爱
.
赞 👍