laravel-admin自定义页面中form禁用pjax使用ajax
1、use Encore\Admin\Widgets\Form
2、显示使用如下格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public function addSite(Content $content) { $content->title('网站标题'); $content->description('网站描述'); $content->breadcrumb( ['text' => '首页', 'url' => '/'], ['text' => '导航'] ); $form = new wForm(); //配置表单 $form->setWidth(8, 3); //提交的url $form->action('ajax提交的act'); ..... $form->changeSubmit(); //用button替换submit $form->disablePjax(); //禁止pjax $form_html = $form->render(); //生成html $content->view('模板文件',[变量=> 值, 'form' => $form_html]); //如果想使用form的验证,保存form组件,用于ajax方法使用form的rules session(['form' => $form]); return $content; } |
3、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
//增加站点 注意'form:eq(1),因为laravel-admin的自定义页面本身有一个form $(document).on('click', 'form:eq(1) :button', function (event) { //移除错误提示 $(".inputError").remove(); //移除错误提示的class $('.form-group').removeClass("has-error"); //禁止重复提交 $(this).button('loading'); var form = $('form')[1]; //var formData = $(form).serializeArray(); var formData = new FormData(form); $.ajax({ method: 'POST', url: form.action, data: formData, //ajax2.0可以不用设置请求头,但是jq帮我们自动设置了,这样的话需要我们自己取消掉 //用于图片上传 contentType:false, //取消帮我们格式化数据,是什么就是什么 //用于图片上传 processData:false, success: function (data) { data = $.parseJSON(data); if(data.status) { //添加成功,清空form form.reset(); } else { if(data.errors == '') { //没有校验错误 } else { //进行校验错误处理 var errors = data.errors; var error_info = errors.split('*'); $.each(error_info,function(index,value){ var label = value.split('|'); var target = $('#'+label[0]); var error_info = '<label class="control-label inputError"><i class="fa fa-times-circle-o"></i> '+label[1]+'</label>'; target.parent().before(error_info); target.closest('.form-group').addClass("has-error"); }); return false; } } }, error:function(request){ $.admin.swal({ title: "发生错误", text: request.responseJSON.message, type: "error", showCancelButton: true }); } }); //按钮回复正常。 $(this).button('reset'); event.preventDefault(); }); |
4、模板form部分 {!! $form !!} 参见2
5、提交后存盘的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
public function storeSite(Request $request) { $errors = ''; $ret = [ 'status' => false, 'errors' => $errors ]; $form = session('form'); //$form->sanitize(); //移除 _token等等不需要的值 //移除忽略字段 foreach (['ignore_name'] as $key) { request()->request->remove($key); } //表单校验 $validationMessages = $form->validate($request); //校验失败 返回错误信息 $validationMessages === false if($validationMessages){ //$errors = json_encode($validationMessages->getMessages(), JSON_UNESCAPED_UNICODE); foreach($validationMessages->getMessages() as $lable => $error) { //如果是多个错误信息 if(is_array($error)) { for($i = 0; $i < count($error); $i++) { $errors .= $lable.'|'.$error[$i].'*'; } } else { $errors = $lable.'|'.$error.'*'; } } $ret['errors'] = rtrim($errors,'*'); //删除最后一个* //页面返回 //return response()->json(['errors' => \Arr::dot($validationMessages->getMessages())], 422); } else { $site_array = $request->all(); unset($site_array['_token']); $ret = FrontSite::storeSite($site_array); } return json_encode($ret, JSON_UNESCAPED_UNICODE); } |
噢!评论已关闭。