文档章节

phalcon异常处理

吾爱
 吾爱
发布于 2016/08/08 15:23
字数 383
阅读 174
收藏 3

开发情况下 ,有异常直接抛出,方便调试。而在生产环境则不能暴露异常信息,此时需要对异常进行拦截并显示友好页面。

两种方式捕获异常:

  1. 通过dispatcher事件

通过一个简单的例子来展示一下:

    use Phalcon\Dispatcher;
    use Phalcon\Mvc\Dispatcher as MvcDispatcher;
    use Phalcon\Events\Manager as EventsManager;
    use Phalcon\Mvc\Dispatcher\Exception as DispatchException;
    //调度器
    $di->setShared('dispatcher',function(){
    // 创建一个事件管理
    $eventsManager = new EventsManager();

    // 附上一个侦听者
    $eventsManager->attach("dispatch:beforeException", function ($event, $dispatcher, $exception) {
        //非开发模式,拦截异常并处理
        if (!APP_DEBUG) {
            switch ($exception->getCode()) {
                //控制器或动作不存在的时候
                case Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
                case Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
                    $dispatcher->forward(
                        array(
                            'controller' => 'error',
                            'action'     => 'show404'
                        )
                    );
                    break;
                default:
                    $dispatcher->forward(
                        array(
                            'controller' => 'error',
                            'action'     => 'show500'
                        )
                    );

            }
            return false;
        }
    });

    $dispatcher = new MvcDispatcher();

    // 将EventsManager绑定到调度器
    $dispatcher->setEventsManager($eventsManager);

    return $dispatcher;
});

可以根据异常code,也可以根据异常类型来作不同的处理。比如我们自己可以添加一个 HttpException 异常,然后根据状态码显示403 404 400 错误页面等等,其他内部错误就直接显示500页面。

2.在入口脚本try..catch直接处理

try {
    //....
    echo $application->handle()->getContent(); 
}catch(\Exception $e) {
    if (APP_DEBUG) {
        echo $e;
    } else {
        if ($e instanceof Phalcon\Mvc\Dispatcher\Exception) {
            echo $application->response
                ->setStatusCode(404)->sendHeaders()
                ->setContent($application->view->start()->render('error','show404')->finish()->getContent())->getContent();
        } else {
            echo $application->response
                ->setStatusCode(500)->sendHeaders()
                ->setContent($application->view->start()->render('error','show500')->finish()->getContent())->getContent();
        }
    }   
}

代码有点复杂,但逻辑很清晰,就是调用 response对象,设定header头,然后通过view组件渲染对应的模板,最终输出内容。

© 著作权归作者所有

吾爱
粉丝 143
博文 271
码字总数 91680
作品 0
后端工程师
私信 提问
zephir-(12)php函数和异常处理

先在这里感谢各位zephir开源技术提供者 经过了一个多月的学习,zephir的文档译文和基础讲解也将近尾声了,后面的内容最为重要也希望和大家一同更好的学习交流,本节的内容只要是讲解zephir是怎么...

喵了_个咪
2016/03/12
68
0
Zephir-异常处理

Zephir异常处理异常处理 异常处理机制 Zephir可以处理低级的异常,提供跟PHP类似的函数式异常处理方法。当一个异常被抛出时,需要使用一个catch语句来捕获错误并允许用户自由处理错误。 Zeph...

碳素云信息技术
2016/03/05
5
0
phalcon-入门篇2(HelloWord与PhalconTools)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 最近刚好趁着春节放假前几天摸鱼的时间为大家带来今天的phalcon教程,今天教程的内容只要是把...

喵了_个咪
2016/02/01
1K
0
Phalcon PHP Framework 1.1 正式版发布

经历多个beta发布版本后,Phalcon 1.1正式发布! 此版本增加了一些新的功能,修正以及改善了目前的组件,大大提升了性能。我们一直在不断的寻找性能与功能之间的最佳平衡,建立一个可靠的PHP...

netstu_
2013/05/08
3.7K
23
phalcon-入门篇5(请求与返回)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 在节后上班的第一条小编已经迫不及待的来为大家带来今天的phalcon教程,今天所讲的是phalcon...

喵了_个咪
2016/02/16
453
0

没有更多内容

加载失败,请刷新页面

加载更多

非递归实现后序遍历二叉树

问题描述 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行后序遍历,然后将遍历结果打印输出。要求采用非递归方法实现。 解题思路 Push根结点到第一...

niithub
22分钟前
2
0
IDEA 自动删除类中无用的import包

1.手动快捷键 Ctrl + Alt + O 2.配置自动清理 Ctrl + Alt + S 打开设置 然后,进行如下操作:

时刻在奔跑
25分钟前
2
0
cwRsync提示password file must be owned by root when running as root的解决方法

cwRsync提示password file must be owned by root when running as root的解决方法 更新时间:2015年08月30日 23:05:52 投稿:mdxy-dxy 我要评论 今天在配置服务器的时候,用了rsync4.10版本...

rootliu
30分钟前
1
0
Java 交换两个参数

目前有一个小需求: 定义一个函数,交换两个值。于是,有人就写了这样一个函数。 public class exchange_01 { public static void main(String[] args) { // TODO Auto-gen...

hellation_
39分钟前
1
0
ExoPlayer简单使用

一、介绍 ExoPlayer是google开源的应用级媒体播放器项目,该开源项目包含ExoPlayer库和演示demo,github地址:https://github.com/google/ExoPlayer。 二、概述 ExoPlayer库的核心是ExoPlay...

零点B5
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部