我试图通过我的网络应用程序提供用户友好的错误消息,以查找某些错误。我希望能够传递throw异常调用和额外参数,例如“USER”,因此错误控制器将此参数提供给视图并显示不同的样式页面,可能具有更友好的颜色和有意义的消息,但我可以弄清楚如何传递额外的参数。这是当前的设置:
检查其中一个控制器:
throw new Zend_Controller_Exception("User not found",403);
错误控制器(ErrorController.php):
class ErrorController
extends Zend_Controller_Action
{
public function errorAction()
{
$errors = $this->_getParam('error_handler');
switch ($errors->type) {
等
所以我希望能够这样做:
$this->view->type = $this->_getParam('type');
在控制器中,所以我可以在视图中执行此操作:
if($this->type == "USER") {
some css stuff
echo $this->exception;
答案 0 :(得分:4)
听起来像你可以:
创建接受其他参数的自定义异常类(My_Exception_UserFriendly
等)
在控制器(或其他地方)将此异常与您的自定义参数一起抛出,
在instanceof
中使用ErrorController
检查来填充您的观看变量。
并且,正如您已经注意到的那样,在尝试呈现之前,请确保您的视图检查是否存在该用户友好数据。
<强>更新强>
实际上,仔细阅读,看起来您不需要例外来携带任何其他信息。简单地创建自定义类应该足以用于检测/呈现目的。
您可以在library/My/Exception/UserFiendly.php
中创建一个空(!)异常类:
class My_Exception_UserFriendly extends Exception
{
}
然后当您遇到想要以友好方式向用户显示的错误时,只需抛出此类型的异常:
if ($rainyDay){
throw new My_Exception_UserFriendly('Seeing some inclement weather, I\'m afraid');
}
然后在ErrorController::errorAction()
:
$exception = $this->_getParam('error_handler')->exception;
if ($exception instanceof My_Exception_UserFriendly){
$this->view->friendlyErrorMessage = $exception->getMessage();
}
最后,在您的视图脚本中error/error.phtml
:
<?php if ($this->friendlyErrorMessage): ?>
<h2>With Humble Apologies, Valued User</h2>
<p><?= $this->escape($this->friendlyErrorMessage) ?></p>
<?php endif; ?>
事实上,有些人认为我们呈现的特定消息纯粹是视图考虑。在这种情况下,您可以为您希望支持的每个友好消息创建一个自定义异常 - 可能会扩展此通用UserFriendly
异常。然后在ErrorController
中,检测特定的子类型,并在视图中设置一个标识该子类型的键。然后,在视图中,呈现与给定键对应的特定友好消息。可能只是为了纯洁而过度杀戮,而是为那些重视这些考虑因素的人抛弃它。