传递zend错误控制器额外参数

时间:2012-06-22 08:22:26

标签: php zend-framework

我试图通过我的网络应用程序提供用户友好的错误消息,以查找某些错误。我希望能够传递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;

1 个答案:

答案 0 :(得分:4)

听起来像你可以:

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

  2. 在控制器(或其他地方)将此异常与您的自定义参数一起抛出,

  3. instanceof中使用ErrorController检查来填充您的观看变量。

  4. 并且,正如您已经注意到的那样,在尝试呈现之前,请确保您的视图检查是否存在该用户友好数据。

    <强>更新

    实际上,仔细阅读,看起来您不需要例外来携带任何其他信息。简单地创建自定义类应该足以用于检测/呈现目的。

    您可以在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中,检测特定的子类型,并在视图中设置一个标识该子类型的键。然后,在视图中,呈现与给定键对应的特定友好消息。可能只是为了纯洁而过度杀戮,而是为那些重视这些考虑因素的人抛弃它。