ホームページ >バックエンド開発 >PHPチュートリアル >ウェブサイト – WeChat – バックエンドエラー報告メカニズム [オリジナル]
プロジェクト開発のニーズに基づいて、異常なエラー プロンプト ページやログイン ページに戻った後のバウンス問題など、Web サイト開発における一般的な例外のリマインダーをまとめました。どちらも簡単な対処方法ですが、それぞれに明らかな点があります。不具合や通話トラブルなど。そこで、開発とデモンストレーションの後、Web サイト プロジェクト用のバックエンド エラー報告メカニズムを構築しました。現時点では機能は単一ですが、これは良い方向だと思います。
以下のコードは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: の処理とジャンプルーティング パラメータ情報 転送メソッド [このメソッドは主に、ジャンプバックする必要がある関連ページにログインするために使用されます]
/** * @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));//重新配置 } }
2 つの重要なテンプレート
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ブログからのものであり、転載する場合は出典と該当リンクを明記してください。