0

我正在尝试通过我的 Web 应用程序为某些错误提供用户友好的错误消息。我希望能够传递抛出异常调用和额外参数,例如“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;
4

1 回答 1

4

听起来你可以:

  1. 创建一个My_Exception_UserFriendly接受其他参数的自定义异常类(或类似的)

  2. 在控制器(或其他地方)中使用您的自定义参数抛出此异常,并且

  3. 使用您的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

于 2012-06-22T08:54:11.023 回答