zf异常处理机制

本文介绍ZF框架中的异常处理机制,重点讲解Zend_Controller_Plugin_ErrorHandler插件如何处理控制器或动作缺失导致的404错误及应用程序内部错误。通过示例代码展示了如何配置错误处理插件并实现定制化的错误页面展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zf异常处理机制

分类: php   120人阅读  评论(0)  收藏  举报

Zend_Controller_Plugin_ErrorHandler插件,用来处理从程序抛出的异常,包括哪些从缺控制器或动作的来的结果

目标:

监视由于缺失控制器或动作方法而产生的异常

监视动作控制器里产生的异常

换句话就是处理HTTP404错误和500错误(内部错误)

 

缺省地,在缺省模块中,Zend_Controller_Plugin_ErrorHandler将转发给ErrorController::errorAction().你可以通过使用在插件中不同的访问器来给他们设置替代的值

setErrorHandlerModule()

setErrrorHandlerController()

setErrorHandlerAction()

setErrorHandler()接受联合数组

 

ErrorHandler插件不仅抓取程序错误,而且也抓取控制器链里由于缺失控制器类/动作方法而产生的错误,也就是404错误。

异常的抓取被记录在一个对象里,这个对象注册在请求里

使用Zend_Controller_Action::_getParam('error_handler')来读取

[php]  view plain copy
  1. <?php  
  2. class ErrorController extends Zend_Controller_Action  
  3. {  
  4.     public function errorAction(){  
  5.         $errors = $this->_getParam('error_handler')  
  6.     }  
  7. }  

读取错误对象

可以通过$errors->type获得类型

Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER 控制器没有被发现

Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION 请求动作没有被发现

Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER 其他异常

前两个异常包404错误

[php]  view plain copy
  1. switch ($errors->type) {  
  2.     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:  
  3.     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:  
  4.     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:  
  5.         
  6.     // 404 error -- controller or action not found  
  7.     $this->getResponse()->setHttpResponseCode(404);   //getResponse()获得Zend_Controller_Response_HTTP HTTP响应对象  
  8.     $this->view->message = 'Page not found';  
  9.     break;  
  10.     default:  
  11.     // application error  
  12.     $this->getResponse()->setHttpResponseCode(500);  
  13.     $this->view->message = 'Application error';  
  14.     break;  
  15. }  


[php]  view plain copy
  1. public function getLog()  
  2. {  
  3.     $bootstrap = $this->getInvokeArg('bootstrap');   //getInvokeArg($key) getInvokeArg('bootstrap')获取Bootstrap对象            if (!$bootstrap->hasPluginResource('Log')) {  //hasPluginResource()判断插件资源是否存在  
  4.         return false;  
  5.     }  
  6.     $log = $bootstrap->getResource('Log');   //getResource()获取资源  
  7.     return $log;  
  8. }  



 不多解释上全面的ErrorController类文件

[php]  view plain copy
  1. <?php  
  2.   
  3. class ErrorController extends Ata_Controller_Common  
  4. {  
  5.     public function indexAction(){  
  6.     }  
  7.   
  8.     public function errorAction()  
  9.     {  
  10.         $errors = $this->_getParam('error_handler'); //$this->_getParam('error_handler')获取错误对象  
  11.         $this->_forward('index');    //$this->_forward('index')跳转到index页面  
  12.         switch ($errors->type) { //$errors->type 错误类型  
  13.             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:  
  14.             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:  
  15.             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:  
  16.           
  17.                 // 404 error -- controller or action not found  
  18.                 $this->getResponse()->setHttpResponseCode(404);//getResponse()获得Zend_Controller_Response_HTTP HTTP响应对象  
  19.                 $this->view->message = 'Page not found';  
  20.                 break;  
  21.             default:  
  22.                 // application error  
  23.                 $this->getResponse()->setHttpResponseCode(500);  
  24.                 $this->view->message = 'Application error';  
  25.                 break;  
  26.         }  
  27.           
  28.         // Log exception, if logger available  
  29.         if ($log = $this->getLog()) {  
  30.             $log->crit($this->view->message, $errors->exception);  
  31.         }  
  32.           
  33.         // conditionally display exceptions  
  34.         if ($this->getInvokeArg('displayExceptions') == true) { //页面显示异常  
  35.             $this->view->exception = $errors->exception;  
  36.         }  
  37.           
  38.         $this->view->request   = $errors->request;  
  39.     //写日志文件  
  40.         date_default_timezone_set('Asia/Shanghai');  
  41.         $fp  = fopen( APPLICATION_PATH . '/data/logs/exceptions.log''a+');  
  42.         $log = "Time: ".date('Y-m-d H:i:s')."\n";  
  43.         $log.= "Message: ".$errors->exception->getMessage()."\n";  
  44.         $log.= "Trace:\n".$errors->exception->getTraceAsString()."\n";  
  45.         $log.= "\n\n";  
  46.         fwrite($fp$log);  
  47.         fclose($fp);  
  48.   
  49.         if(404==$this->getResponse()->getHttpResponseCode()){  
  50.             $this->view->seo = $this->getHelper('Seo')->getSeo('/error');  
  51.             $this->_forward('index');  
  52.         }else{  
  53.             $this->_redirect('/');  
  54.         }  
  55.     }  
  56.   
  57.     public function getLog()  
  58.     {  
  59.         $bootstrap = $this->getInvokeArg('bootstrap');//getInvokeArg()获取Bootstrap对象  
  60.         if (!$bootstrap->hasPluginResource('Log')) {//hasPluginResource()判断插件资源是否存在  
  61.             return false;  
  62.         }  
  63.         $log = $bootstrap->getResource('Log');//getResource()获取资源  
  64.         return $log;  
  65.     }  
  66. }  
内容概要:本文详细介绍了基于FPGA的144输出通道可切换电压源系统的设计与实现,涵盖系统总体架构、FPGA硬件设计、上位机软件设计以及系统集成方案。系统由上位机控制软件(PC端)、FPGA控制核心和高压输出模块(144通道)三部分组成。FPGA硬件设计部分详细描述了Verilog代码实现,包括PWM生成模块、UART通信模块和温度监控模块。硬件设计说明中提及了FPGA选型、PWM生成方式、通信接口、高压输出模块和保护电路的设计要点。上位机软件采用Python编写,实现了设备连接、命令发送、序列控制等功能,并提供了一个图形用户界面(GUI)用于方便的操作和配置。 适合人群:具备一定硬件设计和编程基础的电子工程师、FPGA开发者及科研人员。 使用场景及目标:①适用于需要精确控制多通道电压输出的实验环境或工业应用场景;②帮助用户理解和掌握FPGA在复杂控制系统中的应用,包括PWM控制、UART通信及多通道信号处理;③为研究人员提供一个可扩展的平台,用于测试和验证不同的电压源控制算法和策略。 阅读建议:由于涉及硬件和软件两方面的内容,建议读者先熟悉FPGA基础知识和Verilog语言,同时具备一定的Python编程经验。在阅读过程中,应结合硬件电路图和代码注释,逐步理解系统的各个组成部分及其相互关系。此外,实际动手搭建和调试该系统将有助于加深对整个设计的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值