在PHP MVC应用程序中捕获异常的位置?
我有小/中型
PHP应用程序,用于练习OOP和MVC技能.我有init / bootstrap文件,它调用调用Controller的Router – >服务层 – >存储库(数据库)然后将变量发送回View Layer(使用DiC / IOC处理的所有依赖项).
我创建了扩展Core Exception类的抽象类BaseException.然后我有不同的异常类 – DatabaseException,FileException等. 触发异常的示例:在数据库层中我尝试从数据库中获取数据,如果失败则会抛出新的DatabaseException. 示例2:在我处理文件包含,保存,删除的类中 – 如果发生错误,则抛出新的FileException. 在init / bootstrap文件中或者在BaseController中放置try catch代码的位置?但是如果Controller失败并且它抛出某种ControllerException会怎样. 在我看来,它可能看起来像这样(init.php文件): try { // create new router $router = $container->get('Router'); $router->import'Config/routes.php'); // run the router $router->route(); // load controller $dispatcher = $container->get('Dispatcher'); $dispatcher->load(); } catch (DatabaseException $e) { echo "Database error!"; $log->log('Database error',$e->getMessage()); } catch (FileException $e) { echo "File error!"; $log->log('File error',$e->getMessage()); } catch (Exception $e) { // default echo "Some exceptional error!"; $log->log('Default exception',$e->getMessage()); } 还有一个问题,如何记录这些异常(错误),如上例所示,还是应该在BaseException中注入Log类并处理日志记录? 解决方法
与普通的PHP一样,您可以在任何地方实现尝试/捕获.
在我的项目中(作为MVC框架用户),我通常在我的控制器方法中处理异常,因为他们有责任处理应用程序中的进程.但如果需要,我会在中间件甚至模型中实现它,如果我愿意的话. 在你的情况下,似乎你想让你的框架在将它输出到用户界面之前处理异常,就像Laravel(也有许多其他人)那样. 您可以使用PHP中的set_exception_handler()函数完成此操作. 以下是基于docs示例的示例: set_exception_handler(function($exception){ //you could write in a log file here for example... echo "Uncaught exception: ",$exception->getMessage(),"n"; }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |