Home Backend Development PHP Tutorial 网站–微信–后端报错机制【原创】

网站–微信–后端报错机制【原创】

Jun 23, 2016 pm 01:05 PM

基于项目开发的需求,总结出网站开发常见的异常提醒包括异常错误的提示页面以及返回登录页面之后的回跳问题,虽然两种都有简便的方法进行处理,但是都存在各自明显的缺陷和调用上的麻烦之处。所以经过开发论证,本人自己搭建了一个网站类项目的后端报错机制。目前虽然功能单一,但我以为这是一个好的方向。

以下代码是基于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)); //需要重新设置替换            }        }    }
Copy after login

接收端处理方式

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;    }
Copy after login

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)));    }
Copy after login

报错回调处理控制器(核心方法)–用于拆解封装好的参数进行相应的请求跳转

/**     * 内部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));//重新配置        }    }
Copy after login

两个重要的模板

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>
Copy after login

2:提示模板wx_message.html.twig,根据控制器和自己项目的特点进行嵌套就可以了返回值

data.url          回跳的URl                    data.message      错误信息                    data.text         回跳按钮上的字
Copy after login

如果有更好的建议请在帖子下面留言,会积极听取的

本文永久地址:http://blog.it985.com/16380.html

本文出自IT985博客 ,转载时请注明出处及相应链接。

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

11 Best PHP URL Shortener Scripts (Free and Premium) 11 Best PHP URL Shortener Scripts (Free and Premium) Mar 03, 2025 am 10:49 AM

Long URLs, often cluttered with keywords and tracking parameters, can deter visitors. A URL shortening script offers a solution, creating concise links ideal for social media and other platforms. These scripts are valuable for individual websites a

Working with Flash Session Data in Laravel Working with Flash Session Data in Laravel Mar 12, 2025 pm 05:08 PM

Laravel simplifies handling temporary session data using its intuitive flash methods. This is perfect for displaying brief messages, alerts, or notifications within your application. Data persists only for the subsequent request by default: $request-

Build a React App With a Laravel Back End: Part 2, React Build a React App With a Laravel Back End: Part 2, React Mar 04, 2025 am 09:33 AM

This is the second and final part of the series on building a React application with a Laravel back-end. In the first part of the series, we created a RESTful API using Laravel for a basic product-listing application. In this tutorial, we will be dev

Simplified HTTP Response Mocking in Laravel Tests Simplified HTTP Response Mocking in Laravel Tests Mar 12, 2025 pm 05:09 PM

Laravel provides concise HTTP response simulation syntax, simplifying HTTP interaction testing. This approach significantly reduces code redundancy while making your test simulation more intuitive. The basic implementation provides a variety of response type shortcuts: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

cURL in PHP: How to Use the PHP cURL Extension in REST APIs cURL in PHP: How to Use the PHP cURL Extension in REST APIs Mar 14, 2025 am 11:42 AM

The PHP Client URL (cURL) extension is a powerful tool for developers, enabling seamless interaction with remote servers and REST APIs. By leveraging libcurl, a well-respected multi-protocol file transfer library, PHP cURL facilitates efficient execution of various network protocols, including HTTP, HTTPS, and FTP. This extension offers granular control over HTTP requests, supports multiple concurrent operations, and provides built-in security features.

12 Best PHP Chat Scripts on CodeCanyon 12 Best PHP Chat Scripts on CodeCanyon Mar 13, 2025 pm 12:08 PM

Do you want to provide real-time, instant solutions to your customers' most pressing problems? Live chat lets you have real-time conversations with customers and resolve their problems instantly. It allows you to provide faster service to your custom

Announcement of 2025 PHP Situation Survey Announcement of 2025 PHP Situation Survey Mar 03, 2025 pm 04:20 PM

The 2025 PHP Landscape Survey investigates current PHP development trends. It explores framework usage, deployment methods, and challenges, aiming to provide insights for developers and businesses. The survey anticipates growth in modern PHP versio

Notifications in Laravel Notifications in Laravel Mar 04, 2025 am 09:22 AM

In this article, we're going to explore the notification system in the Laravel web framework. The notification system in Laravel allows you to send notifications to users over different channels. Today, we'll discuss how you can send notifications ov

See all articles