Heim Backend-Entwicklung 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)); //需要重新设置替换            }        }    }
Nach dem Login kopieren

接收端处理方式

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;    }
Nach dem Login kopieren

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)));    }
Nach dem Login kopieren

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

/**     * 内部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));//重新配置        }    }
Nach dem Login kopieren

两个重要的模板

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>
Nach dem Login kopieren

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

data.url          回跳的URl                    data.message      错误信息                    data.text         回跳按钮上的字
Nach dem Login kopieren

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

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

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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Mar 04, 2025 am 09:33 AM

Dies ist der zweite und letzte Teil der Serie zum Aufbau einer Reaktionsanwendung mit einem Laravel-Back-End. Im ersten Teil der Serie haben wir eine erholsame API erstellt, die Laravel für eine grundlegende Produktlistenanwendung unter Verwendung von Laravel erstellt hat. In diesem Tutorial werden wir Dev sein

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

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

In diesem Artikel werden wir das Benachrichtigungssystem im Laravel -Web -Framework untersuchen. Mit dem Benachrichtigungssystem in Laravel können Sie Benachrichtigungen an Benutzer über verschiedene Kanäle senden. Heute werden wir diskutieren, wie Sie Benachrichtigungen OV senden können

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

PHP -Protokollierung: Best Practices für die PHP -Protokollanalyse PHP -Protokollierung: Best Practices für die PHP -Protokollanalyse Mar 10, 2025 pm 02:32 PM

Die PHP -Protokollierung ist für die Überwachung und Debugie von Webanwendungen von wesentlicher Bedeutung sowie für das Erfassen kritischer Ereignisse, Fehler und Laufzeitverhalten. Es bietet wertvolle Einblicke in die Systemleistung, hilft bei der Identifizierung von Problemen und unterstützt eine schnellere Fehlerbehebung

See all articles