ZF中的“插件”提供了对页面动作的扩展接口,只需实现Zend_Controller_Plugin_Abstract的相应方法。
文档中说道:
- routeStartup() 在 Zend_Controller_Front 向注册的Router发送请求前被调用。
- routeShutdown() 在Router完成请求的路由后被调用。
- dispatchLoopStartup() 在 Zend_Controller_Front 进入其分发循环(dispatch loop)前被调用。
- preDispatch() 在动作由Dispatcher分发前被调用。该回调方法允许代理或者过滤行为。通过修改请求和重设分发标志位(利用 Zend_Controller_Request_Abstract::setDispatched(false) )当前动作可以跳过或者被替换。
- postDispatch() 在动作由Dispatcher分发后被调用。该回调方法允许代理或者过滤行为。通过修改请求和重设分发标志位(利用 Zend_Controller_Request_Abstract::setDispatched(false) )可以指定新动作进行分发。
- dispatchLoopShutdown() 在 Zend_Controller_Front 推出其分发循环后调用。
代码中可以看到,Zend_Controller_Front在构造函数中初始化了Zend_Controller_Plugin_Broker(维护了 一个Plugin列表_plugins),之后在registerPlugin中把对应的Plugin加入到列表中,触发事件的时候会依次调用 _plugins列表中的Plugin调用响应的方法。
自定义的插件继承自Zend_Controller_Plugin_Abstract,然后使用Zend_Controller_Front的registerPlugin方法注册即可:
class MyPlugin extends Zend_Controller_Plugin_Abstract
{
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
$this->getResponse()->appendBody("<p>routeStartup() called</p>"n");
}
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
$this->getResponse()->appendBody("<p>routeShutdown() called</p>"n");
}
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$this->getResponse()->appendBody("<p>dispatchLoopStartup() called</p>"n");
}
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$this->getResponse()->appendBody("<p>preDispatch() called</p>"n");
}
public function postDispatch(Zend_Controller_Request_Abstract $request)
{
$this->getResponse()->appendBody("<p>postDispatch() called</p>"n");
}
public function dispatchLoopShutdown()
{
$this->getResponse()->appendBody("<p>dispatchLoopShutdown() called</p>"n");
}
}
Zend_Controller_Front::getInstance()->registerPlugin(new MyPlugin());
错误处理(Zend_Controller_Plugin_ErrorHandler)
Zend_Controller_Plugin_ErrorHandler默认的Action为"error",Controller是"Error"。 所以自定义一个继承自Zend_Controller_Action的类ErrorController、实现errorAction方法、创建 error.phtml就可以让Zend_Controller_Plugin_ErrorHandler找到了。
若在Zend_Controller_Front::dispatch()前设置了'noErrorHandler'为true则不加载Zend_Controller_Plugin_ErrorHandler。
若设置了Zend_Controller_Front::throwExceptions(true)则出错时直接throw,不写到_response的$_exceptions列表中。
分享到:
相关推荐
Zend Framework推崇“选择性使用”原则,开发者可以根据项目需求选择使用其中的部分或全部组件,极大地提高了开发效率和代码质量。 **二、CMS系统的核心功能** CMS系统通常包含以下核心功能: 1. **内容创建与...
在Zend Framework中,`Zend_Controller_Plugin`是一个强大的机制,允许开发者在应用程序的不同阶段插入自定义的行为,以扩展和增强其功能。插件系统提供了一种灵活的方式,可以在请求生命周期的关键点进行干预,如...
这个“最新版本”指的是 Zend Framework 的 1.11.10 版本,它包含了 MVC(Model-View-Controller)架构模式,这是 Web 开发中常用的设计模式,用于分离应用程序的不同部分,提升代码的可读性和可维护性。 1. **MVC ...
10. **社区支持**:作为开源项目,Zend Framework拥有庞大的开发者社区,提供丰富的资源、文档和插件,使得学习和解决问题更为便捷。 总结来说,Zend Framework 1.11.10为PHP开发者提供了一个强大且灵活的开发环境...
**一、Zend Framework简介** Zend Framework 是一个开源、基于组件的 PHP 框架,它遵循 Model-View-Controller (MVC) 设计模式,为开发高质量、可扩展的 Web 应用程序提供了强大的基础。此版本1.12.9是该框架的一个...
**Zend Framework 中文手册** Zend Framework 是一个基于 Model-View-Controller (MVC) 设计模式的开源PHP Web应用程序框架,它提供了一组强大的工具和服务,帮助开发者构建高质量的、可扩展的Web应用。该框架遵循...
Zend Framework的核心组件包括: Zend_Controller(MVC模式的实现),Zend_Db(数据库抽象层),Zend_View(视图处理),以及Zend_Auth和Zend_Acl(身份验证和访问控制)。此外,Zend Framework还遵循了PSR(PHP框架...
7. **事件系统**:Zend Framework 还包含了事件管理组件,允许开发者订阅和触发事件,以实现功能的扩展和插件机制。配置事件监听器和处理器可以在 `events.config.php` 文件中完成。 8. **缓存配置**:为了提高性能...
本书《Beginning Zend Framework》由Armando Padilla编写,旨在为读者提供一个全面深入地了解Zend Framework的机会。作为一款广泛使用的PHP框架,Zend Framework在Web开发领域扮演着重要的角色。本书通过系统性的...
通过上述两个工作流程的分析,我们可以清楚地看到 Zend Framework 在处理请求时的内部机制。基本请求工作流程主要关注于请求的初始化和配置阶段,而前端控制器分发工作流程则专注于具体请求的处理和分发逻辑。这种...
插件管理机制使得扩展和自定义 Zend Framework 的功能变得简单,通过实现特定接口或继承特定基类,开发者可以创建自己的插件。 10. **自动加载(Autoloading)** Zend Framework 实现了PSR-0和PSR-4标准的自动...
**基于Zend Framework 制作的博客** Zend Framework是一款开源、基于PHP 5的MVC(Model-View-Controller)框架,旨在提供灵活、高性能的Web应用程序开发。它遵循企业级的开发标准,提供了丰富的组件库,支持面向...
标题 "Smarty jquery_api Zend_Framework_zh" 涵盖了三个关键的IT技术:Smarty、jQuery API和Zend Framework,这些都是Web开发中非常重要的组件。这些技术的中文版本表示它们是针对中文用户群体,方便国内开发者学习...
标签中提到的“Zend”和“ZendFramework”表明本书会涵盖使用Zend Framework进行插件开发的相关知识,包括但不限于: 1. **组件化开发**:如何利用Zend Framework的模块化和组件化特性,创建可复用的插件。 2. **...
路由器是Zend Framework中非常重要的一个组件,它是决定如何将请求映射到相应的模块、控制器和动作的核心机制。路由在Zend Framework中的作用是处理URL的解析过程,将URL的各个部分(模块、控制器、动作及参数)提取...
其中,Bootstrap类是Zend Framework中用于应用程序引导和初始化的核心机制。Zend_Application_Bootstrap_Bootstrapper是所有引导类必须实现的基本接口,它提供了配置应用程序、注册资源以及引导应用程序的方法。 ...