书接上回,当提交表单后不跳转页面也不报错时咋处理呢。
六、提交表单不跳转页面且不报错
前面也说了,其实提交后发生了数据传送。但是由于验证未通过又返回了编辑页面,所以我们要做的是找到验证的方法,并把验证结果打印出来。于是找到这个页面vendor\encore\laravel-admin\src\Form.php,找到update方法,在return back()->withInput()->withErrors($validationMessages),这一句前面加上一句dd($validationMessages);再次提交后就能看到类似如下所示的报错。
当然,这只是帮助找到问题。究竟如何解决还要根据实际情况而定。另外要记得最后把上述添加的语句屏去除。
七、联表删除数据
我说的联表删除并不是设计数据库的范畴,而是用这个框架更加灵活的处理删除数据。
如果你对这个框架了解的话,当点击table右侧删除按钮或左上角批量删除按钮时,程序会执行vendor\encore\laravel-admin\src\Form.php里的删除方法。现在我们要做的是针对某个页面做自定义的删除处理。所以我们就要在对应控制器写入自定义的方法。并且大多数删除操作都要执行回滚事务的,因此下面的删除方法比较具有普遍性,供大家调用。
//删除评论
protected function destroy($id){
$id_Arr = explode(',',$id);
foreach($id_Arr as $v){
$news =DB::table('comments')->select('obj_type','obj_id')->where('id',$v)->first();
$table = 'works';
$ obj_id= $news->obj_id;
DB::transaction(function()use($table,$obj_id,$v) {
DB::table($table)->where('id',$obj_id)->decrement('comment_count');
DB::table('comments')->where('id',$v)->delete();
DB::table('com_point')->where('com_id',$v)->delete();
});
}
}
}
再下面是更简单且更实用的功能了。
七、自定义验证规则报错提示。
如上图所示是我们常见的报错提示,格式和语种都不太符合我国国情。如果单个页面设置验证报错又太麻烦,所以我们就单独做一个国产验证报错(可以只做常用的一两项)。
一般我们都会把框架显示语言配置为中文,自然地验证提示也会执行中文。但是由于中文提示包不存在才会执行英文。那么我们就给他创建一个中文包,从admin的视图层里找到lang目录,再找到en目录里面的validation.php页面拷贝到与en平级目录的zh_CN目录(如没有就创建)。只要做到这一步,程序就会执行中文包里的提示信息。我们现在要做的就是在validation.php页面根据不同规则定义不同的中文提示。
最后一个问题是解决权限。因为admin框架里面可以灵活自定义管理员菜单,给我们带来了很大的开发便利。但是如果上线后还存在这种超级权限的话,就会存在重大事故的风险。所以我们至少需要屏蔽删除和添加的按钮,或者给客户提供一个非超级管理员的角色,只能修改不能删除和添加菜单。
八,屏蔽系统菜单的删除和新增
首先说删除、编辑按钮,找到视图层的views\tree\branch.blade.php页面,很明显以下两句是控制编辑和删除的,<a href="/{{ $path }}/{{ $branch[$keyName]}}/edit"><i class="fa fa-edit"></i></a>
6 <ahref="javascript:void(0);" data-id="{{ $branch[$keyName]}}" class="tree_branch_delete"><i class="fafa-trash"></i></a>;你可以直接用注释符号屏蔽掉,也可以用程序的管理员判断方法来决定是否给予显示。
同样的道理,找到另外一个视图页面views\admin\widgets\box.blade.php,把所有代码注释掉,就屏蔽了新建菜单的功能。在这里提醒的是,最好是删除或者注释变量。如果只是用注释和display隐藏,还是会存在安全隐患。
关于laravel-admin这个框架,目前我就总结到这么多了。以后在开发过程中有用到更好的功能再贴出来分享吧。整体上来说不得不佩服老外的东西确实很流逼。如果想要灵活运用,还是要多看看开发文档。