网站–微信–后端报错机制【原创】
基于项目开发的需求,总结出网站开发常见的异常提醒包括异常错误的提示页面以及返回登录页面之后的回跳问题,虽然两种都有简便的方法进行处理,但是都存在各自明显的缺陷和调用上的麻烦之处。所以经过开发论证,本人自己搭建了一个网站类项目的后端报错机制。目前虽然功能单一,但我以为这是一个好的方向。
以下代码是基于Symfony框架写的源码
调用端
报错的点引用方法,传递必要参数,进入报错处理流程
/** * 异常处理机制 * * @param bool|false $default 是否跳转默认的路由 true真 flase 假 * @param string $message 错误信息 ''自动跳到登录页面 不为空则跳到提示页面 * @param array $data 记录访问此路由的post的参数用于回跳--需要注意的是post提示中不得有文件类型和数组类型否则回调必然会报参数丢失(传参_POST) * @param string $url 默认为空 当defaulet设置为true时此参数生效,用户替换已设置的默认路由 * @param int type 默认为1 1为返回页面 其余则代表返回路由用户ajax请求 * @return \Symfony\Component\HttpFoundation\RedirectResponse */ public function exception_handling($default = false, $message = '', $data = array(), $url = '', $type = 1) { if ($message != '') { //这里的强制处理,是避免程序因为某个参数的丢失陷入死循环 $default = true; } //封装参数 $info = array( 'data' => $data, ); if ($default == true) { //跳转到默认的路由 if ($url == '') { $info['url'] = $this->get('request')->getSchemeAndHttpHost() . $this->generateUrl('wx_index');//需要重新设置替换 } else { $info['url'] = $url; } $info['data'] = array(); } else { $http_host = $_SERVER['HTTP_HOST']; $php_self = $_SERVER['PHP_SELF']; $query = $_SERVER['QUERY_STRING']; $info['url'] = 'http://' . $http_host . $php_self; if ($query != '') { $info['url'] .= '?' . $query; } } //对原有的值进行封装 if (!empty($data)) { $i = 0; foreach ($data as $index => $value) { $info['info'][$i]['key'] = $index; $info['info'][$i]['value'] = $value; $i++; } } //将数据序列化打包 unset($info['data']); $info = urlencode(base64_encode(@serialize($info))); if ($message == '') { //跳转到登录页面 if ($type == 1) { return $this->redirect($this->generateUrl('wx_auth_login', array('info' => $info)));//需要重新设置替换 } else { return $this->get('request')->getSchemeAndHttpHost() . $this->generateUrl('wx_auth_login', array('info' => $info));//需要重新设置替换 } } else { //跳转到错误页面 if ($type == 1) { return $this->redirect($this->generateUrl('api_wx_other_err', array('message' => $message, 'info' => $info))); //需要重新设置替换 } else { return $this->get('request')->getSchemeAndHttpHost() . $this->generateUrl('api_wx_other_err', array('message' => $message, 'info' => $info)); //需要重新设置替换 } } }
接收端处理方式
1:对于路由参数info的处理和跳转方法【此处方法主要用于登录需要回跳的有关页面】
/** * @param $info 报错机制传递来封装参数info * @return string 返回url */ public function login_ok_url($info) { if (!is_array(@unserialize(base64_decode(urldecode($info))))) { $url = $this->get('request')->getSchemeAndHttpHost() . $this->generateUrl('wx_index');//需要重新设置替换 默认页 } else { $url = $this->get('request')->getSchemeAndHttpHost() . $this->generateUrl('api_wx_other_postJump', array('info' => $info)); //需要重新设置替换 报错回跳处理器 } return $url; }
2:错误提示页面跳转逻辑
/** * 错误提示页面 * * @param $message * @param $info * @return \Symfony\Component\HttpFoundation\Response */ public function errAction($message , $info){ //得到传来的post参数用于页面再次提交 $url = $this->get('request')->getSchemeAndHttpHost() . $this->generateUrl('api_wx_other_postJump', array('info' => $info)); //回跳按钮上面的字 $info = @unserialize(base64_decode($info)); if(!is_array($info) || $info['url'] == $this->get('request')->getSchemeAndHttpHost() . $this->generateUrl('wx_index')) { //需重新配置 $url = $this->get('request')->getSchemeAndHttpHost() . $this->generateUrl('wx_index'); $text = '返回首页'; }else{ $text = '返回上一页'; } return $this->render('@Api/Default/wx_message.html.twig',array('data' => array('message' => $message, 'url' => $url ,'text' => $text))); }
报错回调处理控制器(核心方法)–用于拆解封装好的参数进行相应的请求跳转
/** * 内部post请求 * * @param $info * @return \Symfony\Component\HttpFoundation\RedirectResponse|Request */ public function postJumpAction($info){ //将数组转换 $info = @unserialize(base64_decode(urldecode($info))); if(!is_array($info)) { $url = $this->get('request')->getSchemeAndHttpHost() . $this->generateUrl('wx_index'); //重新配置 }else{ $url = $info['url']; } if(empty($info['info'])){ return $this->redirect($url); }else{ return $this->render('@Api/Default/postJump.html.twig', array('data' => $info));//重新配置 } }
两个重要的模板
1:postJump.html.twig模板–用户再次向目标路由发送post请求
<html><head> <meta charset="UTF-8"> <title>正在跳转...</title></head><body><div id = 'hide'><form id="myForm" action= '{{ data.url }}' method="post" > {% for item in data.info %} <input type="hidden" name= "{{ item.key }}" value="{{ item.value }}" > {% endfor %} <input type="submit" id="submit" value="正在跳转..."> </form> </div><script src="{{ asset('js/jquery-1.11.3.min.js') }}"></script><script> $(function () { $('#submit').trigger("click"); })</script></body></html>
2:提示模板wx_message.html.twig,根据控制器和自己项目的特点进行嵌套就可以了返回值
data.url 回跳的URl data.message 错误信息 data.text 回跳按钮上的字
如果有更好的建议请在帖子下面留言,会积极听取的
本文永久地址:http://blog.it985.com/16380.html
本文出自IT985博客 ,转载时请注明出处及相应链接。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。
