gpt4 book ai didi

zend-framework - Zend Framework 如何发送到自定义错误页面?

转载 作者:行者123 更新时间:2023-12-04 06:53:38 24 4
gpt4 key购买 nike

我有可以被阻止的成员,当成员被阻止时,我想将他们发送到自定义错误页面,我将如何在 zend 框架中执行此操作?我试过

throw new Zend_Controller_Dispatcher_Exception('Your message here');

但是当我这样做时,它没有说“您的消息在这里”,而是说“找不到页面”。

这是我的错误 Controller 。
<?php

class ErrorController extends Zend_Controller_Action
{

public function errorAction()
{
$errors = $this->_getParam('error_handler');

switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:

// 404 error -- controller or action not found
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = 'Page not found';
break;

// 666 error -- controller or action not found
$this->getResponse()->setHttpResponseCode(666);
$this->view->message = 'Blocked';
break;
default:
// application error
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = 'Application error';
break;
}

// Log exception, if logger available
if ($log = $this->getLog()) {
$log->crit($this->view->message, $errors->exception);
}

// conditionally display exceptions
if ($this->getInvokeArg('displayExceptions') == true) {
$this->view->exception = $errors->exception;
}

$this->view->request = $errors->request;
}

public function getLog()
{
$bootstrap = $this->getInvokeArg('bootstrap');
if (!$bootstrap->hasPluginResource('Log')) {
return false;
}
$log = $bootstrap->getResource('Log');
return $log;
}

}

这是文档, http://framework.zend.com/manual/en/zend.exception.using.html我不明白:(

最佳答案

这里有一些关于使其工作的建议。

首先,您需要将您的错误与标准 no_route/no_controller/no_action 区分开来。错误。为此,您可以抛出您自己的自定义异常(您可以从 PHP 的 Exception 类扩展它。

throw new My_Exception_Blocked('You are blocked');

然后,将错误 Controller 修改为如下所示:
public function errorAction()
{
$errors = $this->_getParam('error_handler');

switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:

// 404 error -- controller or action not found
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = 'Page not found';
break;

// check for any other exception
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER:
if ($errors->exception instanceof My_Exception_Blocked) {
$this->getResponse()->setHttpResponseCode(403);
$this->view->message = $errors->exception->getMessage();
break;
}
// fall through if not of type My_Exception_Blocked

default:
// application error
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = 'Application error';
break;
}
}

我还更改了来自 666 的响应代码至 403因为没有 6xx HTTP 错误代码,这可能会扰乱服务器和/或客户端。

希望有帮助。

关于zend-framework - Zend Framework 如何发送到自定义错误页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11254078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com