zend framework控制404
大概有这么几种情况:
1、假如用户输入不存在的新闻id,而url结构正确,控制器和action都存在。
则程序员需要手动跳转到一个错误页面(您要找的页面不存在),最终返回给用户的http响应码是404。
2、假如用户输入不存在 的控制器名或action名,则程序需要跳转同上那个页面,响应码也是404。
3、假如程序本身有错误,执行时应该显示错误。让程序员能够准确定位。如果部署到服务器上的时候,则应该不显示任何错误。什么响应码无关紧要。
这么多情况中,web服务器的设置如apache不需要任何改动。
php.ini则需要满足第3种情况。
为满足第2种,需要添加一个ErrorController
<?php
class ErrorController extends Zend_Controller_Action
{
/**
* 自定义的的错误页面
*
* 404特别处理
* 500也显示错误信息。
*
*/
public function errorAction()
{
$errors = $this->_getParam('error_handler');
$exception = $errors->exception;
switch ($errors->type) {
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()->setRawHeader('HTTP/1.1 404 Not Found');
$content ='您要找的页面不存在';
// Clear previous content
$this->getResponse()->clearBody(); //清除掉别的信息
$this->view->content = $content; //404页面需要美观,所以有专门的模板
break;
default:
//这句话是个人写的,判断是否是部署服务器
$systemname = get_cfg_var('zendconfig.config_user');
if ($systemname=='real_server') { //假如是远程
$content = "服务器忙,请稍候";//服务器错误时,欺骗顾客
} else { //否则要让程序员看错误信息
// application error
$message1 = $exception->getMessage();
//正则只是换个换行符号
$message1 = preg_replace('#\n#', "<br />\n", $message1);
$message2 = $exception->getTraceAsString();
$message2 = preg_replace('#\n#', "<br />\n", $message2);
$content =$message1 . "<hr />" . $message2 ;
}
$this->_helper->viewRenderer->setNoRender(); //不用模板直接显示
echo $content;
break;
}
}
}
为了满足第一种情况,需要再编写方法,提示给用户的内容应该尽量与页面不存在的模版完全一样。
当数据库里找不到新闻时,代码类似如下
可以考虑换一个控制器
//该方法模拟找不到新闻时的场景,如果
public function test2Action()
{
$response = $this->getResponse();
$this->_helper->viewRenderer->setNoRender();
$this->_forward('/tool/test3');//如果使用了模块,可以再带上模块名
}
//该方法是
public function test3Action()
{
$this->_helper->viewRenderer->setNoRender();
//只要是这个页面的输出,都是404
$this->getResponse()->setRawHeader('HTTP/1.1 404 Not Found');
echo "这是新闻找不到的错误页面";//可以设法让其显示的跟前面的页面一样
}
分享到:
相关推荐
使用 ErrorHandler 作为一个 404 处理器(handler) 7.10.5.2.2. 处理以前呈现的(rendered)输出 7.10.5.2.3. 插件用法示例 7.10.5.2.4. 错误控制器示例 7.11. 使用传统的模块目录结构 7.11.1. 简介 7.11.2. ...
- Zend_Controller_Request_Apache404:这个类用来处理Apache服务器上404错误请求。 在Zend_Controller_Request_Abstract类中,定义了多个方法用于获取和设置请求的相关属性,包括模块、控制器、动作以及参数。比如...
3. 在设置默认URL时,确保URL是正确和可访问的,避免发生404等错误。 4. 使用绝对URI时,考虑到可能产生的性能影响和安全问题。 Zend Framework(Laminas Project)为开发者提供了强大的工具来实现复杂的Web应用...
在Zend Framework中,`Zend_Controller_Response`是处理应用程序响应的核心组件。它负责收集要发送到客户端的数据,包括响应主体(body)和响应头(headers)。本教程将深入讲解`Zend_Controller_Response`的实例化...
Zend Framework 提供了 `Zend_Json` 和 `Zend_XmlRpc` 等组件来处理这些格式。内容协商可以通过查看 `$_SERVER['HTTP_ACCEPT']` 头部来确定客户端所接受的数据格式。 ```php public function _get($id = null) { $...
1. **新引擎ZEND Engine 3.0**:PHP 7引入了全新的ZEND Engine,其优化的代码解析和执行机制使得性能大幅提升。与PHP 5.6相比,PHP 7的执行速度平均提高了30%至40%,在某些特定任务上甚至可以达到3倍之多。 2. **...
5. **处理端口冲突** 如果发现9000端口被占用,可以使用`tasklist|findstr "PID"`命令查找占用该端口的进程,并根据需要关闭或更改该进程的端口。如果无法关闭,那么修改`xdebug.remote_port`设置以避免冲突。 6. ...
优化安装过程及错误处理; MySQL安装增加InnoDB选项(可选); 修正eaccelerator和ionCube的PHP版本判断错误的问题; 修正memcached pid创建失败的问题 修正pdo_mysql安装方法; PHP增加部分禁用函数; ...
- **定义**:处理HTTP级别的异常,如404、500等。 #### 十七、技巧和常见误区 **17.1 切勿编辑system文件夹!** - **建议**:不要直接修改系统文件夹内的文件,以避免更新时丢失自定义内容。 **17.2 不要试图对...
3. **控制器中的处理**:在相应的控制器类中,我们需要设置并返回模板变量。例如,在`UserController`中: ```php public function indexAction() { $users = $this->getUserService()->fetchAll(); return ...
10.2.4 异常处理函数设置set_exception 10.2.4 _handler 157 10.2.5 完整的异常信息 158 10.3 扩展的异常处理类 160 10.4 异常的传递与重掷 163 10.5 小结 165 第11章 PHP与表单 166 11.1 HTML表单简介 166 11.1.1 ...
实例033 Zend Studio中部署Apache服务器 60 第2章 PHP基础 63 2.1 基本语法 64 实例034 在页面中打印PHP的配置信息 64 实例035 在页面中打印服务器时间 65 实例036 在页面中打印当前执行的PHP文件名 67 实例037 区分...
实例033 Zend Studio中部署Apache服务器 60 第2章 PHP基础 63 2.1 基本语法 64 实例034 在页面中打印PHP的配置信息 64 实例035 在页面中打印服务器时间 65 实例036 在页面中打印当前执行的PHP文件名 67 实例037 区分...
新模板产品列表页偶尔有图片无法显示的BUG处理。 新模板产品列表页偶尔有商家昵称过长无法显示的BUG。 新模板店铺商品页的排序问题。 新模板商品详细页左侧广告位错误问题。 5.10 稳定版 增加官方商城模板 全站...