通常PHP应用程序具有用户界面。在MVC分层应用程序中,您可能会抛出一些例外。
您在例外中设置了什么类型的消息:
A)
B)
C)其他变种
答案 0 :(得分:2)
用户应该看不到任何错误或例外。
如果出现问题,请记录下来,也许将其邮寄给自己,但不要将其显示给用户,只需继续进行,就好像什么都没发生一样
这就是生产网站关闭error_reporting的原因
答案 1 :(得分:1)
B - 这就是我这样做的方式。有关ajax和抛出异常的进一步考虑。如果你有一个包含大量javascript的丰富UI,那么我建议您使用不同的状态代码(http响应)抛出不同的异常,然后根据这些响应显示不同的消息。
您可能还希望在不同环境中以不同方式处理异常。在开发过程中,您可能希望显示异常并显示堆栈跟踪。
在现场,您可能希望显示您的404页面,或者在所有例外情况下捕获全部500页。
答案 2 :(得分:1)
C - 发生错误时,您应该只记录回溯,因为您将无法恢复它。您在Application类中捕获错误消息,然后根据设置显示消息或记录它并向用户显示某种通用屏幕。
记录错误时,添加更多信息,例如浏览器版本,IP地址,请求的网址。
在我的模型中,我有时会抛出“ForUser”类型的异常。那些不记录回溯,当被Application类捕获时,它们会显示给用户。很少有异常子类,如验证,逻辑等。
一些UI元素会检测异常以正确显示它们,例如表单提交会调用Model-> update(),捕获验证异常并在Ajax表单中显示适当的字段。
答案 3 :(得分:0)
异常和错误仅适用于开发人员(或与您的应用程序交互的其他应用程序)
在php中,常见的做法是创建错误处理程序(我喜欢将错误转换为异常)和异常处理程序(对于未捕获的异常)
在开发环境中,您会看到完整的异常消息和回溯。
在生产中,处理程序将异常转换为用户友好的消息,根本没有敏感的细节。也许您希望他们知道的是“出了问题”,并且您希望将该消息嵌入到用于网站其余部分的相同布局中。尝试去任何体面的网站并做错事,比如去一个不存在的网址。您可能会找到一个不错的404页面,而不是“例外:url不存在”或类似的东西。
此外,您可能需要不同的错误日志记录级别,具体取决于您所处的环境。在开发过程中,您需要记录所有错误,警告,信息消息和调试消息。在生产中,您可能只想记录错误(可能还有警告)。
设置这一切可能非常棘手。这就是为什么我们有框架来处理这类任务。您应该尝试Symfony 2