后台添加、更新共用一个模板遇到的坑及解决办法
后台操作中大部分工作就是数据库的CURD,而新增与修改中有好多相同的地方,只是有个别地方需要根据条件来判断是新增还是更新。如果共用一个模板,不但从理论上说得过去,而且实践层面上也是行得通的。下面是我在实践过程中遇到的一些问题也就是俗说的“坑”,以及解决办法,拿出来跟大家分享。
一、传递修改记录的ID
1、传递ID的需求
记录中的id是唯一的,可以通过记录的id来实现精准定位,因此更新、删除都需要把需要操作的记录的id传给服务器相关程序来处理。
2、步骤
首先需要在js脚本方法中传参:如onclick = “edit(id)”或者 onclick = “delete(id)”等。
其次需要在定义该方法时传参:如function edit(id){……}
第三,如果是修改记录,就一定要在修改页面中添加<input type="hidden" name="admin_id" value="{{$admin['id']}}">,然后在后台相应的方法中使用$admin_id = (int)$request->admin_id;来接收传过来的被修改记录的id;
否则,后台是拿不到被修改记录的id的。
如果没有这个id,修改页面的数据是无法渲染出来的。
二、Layer.open()参数及正确应用
一般来说,现在添加记录时前端是使用layer.open(),其中的几个参数中,最需要注意的有两个地方:type有五个可选参数,分别是0、1、2、3、4,其中我们选择的是2;这一点大家一定要注意,要不然就会在url传参时遇到很大的问题。
还有一个问题,layer.open中的content:’/admins/admin/add?id=’+id,请注意!这里是get传参,注意形式。
三、新增与更新页面共享
由于新增和更新使用了同一个页面,修改时能够拿到被修改记录的id,所以能渲染出来前端的数据,但是新增是没有id可以传到服务器的,这们前端布置好的value=”{{$admin[‘username’]}}”等信息就会报错,所以需要判断一下:
value=”{{isset($admin[‘username’])?($admin[‘username’]:’’}}
四、保存更新结果时,用户名重复
因管理员的username字段一般是作为登录用户名来用的,因此必须保证用户的唯一,也就是不允许重名,当然也就不能随便修改用户名了。所以遇到以下问题
1062 Duplicate entry ‘rxf’ for key ‘admin_name’
可以将username的值去掉,更新时不要更新。
五、删除传参问题
大家注意啊,删除传参只需要三个步骤: