文档章节

phalcon异常处理

吾爱
 吾爱
发布于 2016/08/08 15:23
字数 383
阅读 123
收藏 3
点赞 0
评论 0

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

两种方式捕获异常:

  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组件渲染对应的模板,最终输出内容。

© 著作权归作者所有

共有 人打赏支持
吾爱
粉丝 142
博文 257
码字总数 89193
作品 0
后端工程师
zephir-(12)php函数和异常处理

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

喵了_个咪 ⋅ 2016/03/12 ⋅ 0

Zephir-异常处理

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

碳素云信息技术 ⋅ 2016/03/05 ⋅ 0

phalcon-入门篇2(HelloWord与PhalconTools)

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

喵了_个咪 ⋅ 2016/02/01 ⋅ 0

Phalcon PHP Framework 1.1 正式版发布

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

netstu_ ⋅ 2013/05/08 ⋅ 23

Phalcon7 1.2.2 重要更新:修复 session 相关 bug

Phalcon7 是继承自 Phalcon 1.3.x,开源、全功能栈、使用 C 编写、针对 PHP 7 优化的高性能框架。 开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类的方式暴露出来,可以直...

朱宗鑫1 ⋅ 2017/01/04 ⋅ 3

phalcon-入门篇5(请求与返回)

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

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

PhalconDebugbar —— Phalcon 框架调试大杀器

Phalcon 是一款非常火的高性能C扩展 php开发框架. 特点是高性能低耦合. 但遗憾的是长期缺少一款得力的调试辅助工具. 今天, 我很高兴地在这里宣布, phalcon也有了专属的debug工具: Phalcon D...

朱__朱 ⋅ 2015/03/11 ⋅ 17

phalcon-入门篇6(控制器)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 废话不多说今天我们就开门见山的来讲一讲phalcon的控制器,控制器是MVC中的C层,也是业务逻辑...

喵了_个咪 ⋅ 2016/02/17 ⋅ 0

Cphalcon 3.2.3 发布,PHP 的 C 扩展 Web 框架

Cphalcon 是一个开源的 Web 框架,作为 PHP 语言 C 扩展,它提供了更高的性能与更低的资源消耗。 Cphalcon 3.2.3 更新如下: 修复 db:beforeQuery() 返回 false 的情况下,PhalconMvcModelQu...

周其 ⋅ 2017/10/13 ⋅ 8

phalcon-入门篇4(log日志和session缓存)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 在新年来临之际!在这里祝关注和喜欢phalcon和phalapi的童鞋们,有你们的支持我才有动力鼓起勇...

喵了_个咪 ⋅ 2016/02/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

中标麒麟(龙芯版)7.0优盘安装

########################################## 制作U盘安装盘: 1.准备U盘: PMON环境下U盘必须格式化成ext3; 昆仑固件环境下可以格式化成ext3,ext4 2.把整个镜像 xxx.iso 复制到U盘下面 3....

gugudu ⋅ 10分钟前 ⋅ 0

老司机写的大数据建模五步走

本文将尝试来梳理一下数据建模的步骤,以及每一步需要做的工作。 01 第一步:选择模型或自定义模式 这是建模的第一步,我们需要基于业务问题,来决定可以选择哪些可用的模型。 比如,如果要预...

gulf ⋅ 19分钟前 ⋅ 0

PacificA 一致性协议解读

PacificA 的 paper 在 08 年左右发出来的,比 Raft 早了 6,7 年。 在 PacificA 论文中,他们强调该算法使用范围是 LAN (Local Area Network),讲白了就是对跨机房不友好。 不管是 ZAB,Raf...

黑客画家 ⋅ 21分钟前 ⋅ 0

盘符图标个性化

设置自己的专属盘符图标 准备ico格式的图片文件一个,在根目录下创建autorun.inf文件 文件内容 [Autorun]icon=logo.ico 重新启动或者插拔U盘即可看到结果...

阿豪boy ⋅ 22分钟前 ⋅ 0

Windows下QQ聊天记录中图片的默认存放位置

Windows下QQ聊天记录中图片的默认存放位置在设置中是没有说明的。 实测位置在:D:\Documents\Tencent Files\974101467\Image 其中: “974101467”为对应的QQ号; “C2C”为个人之间的聊天图...

临江仙卜算子 ⋅ 28分钟前 ⋅ 0

GC 的三种基本实现方式

参考资料《代码的未来》(作者: [日] 松本行弘)。 由于并非本人原著(我只是个“搬运工“),SO 未经本人允许请尽情转载。 另外个人像说明一下这里所说的GC指泛指垃圾回收机制,而单指Jav...

xixingzhe ⋅ 29分钟前 ⋅ 0

Android双击退出

/** * 菜单、返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode......

王先森oO ⋅ 33分钟前 ⋅ 0

idea 整合 vue 启动

刚学习Vue 搭建了一个项目 只能命令启动 Idea里面不会启动 尝试了一下修改启动的配置 如下: 1.首先你要保证你的package.json没有修改过 具体原因没有看 因为我改了这个name的值 就没办法启动...

事儿爹 ⋅ 38分钟前 ⋅ 0

redis在windows环境的后台运行方法

在后台运行,首先需要安装redis服务,命令为 redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动,命令为 redis-server --service-start 停止,命令为 redis-...

程序羊 ⋅ 42分钟前 ⋅ 0

比特币现金开发者提出新的交易订单规则

本周,四位比特币现金的四位开发者和研究员:Joannes Vermorel(Lokad),AmaurySéchet(比特币ABC),Shammah Chancellor(比特币ABC)和Tomas van der Wansem(Bitcrust)共同发表了一篇关...

lpy411 ⋅ 45分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部