Abstract.class.php 2.58 KB
<?php
/**
 * 自定义一个基类 -- 应用中的所有控制器应继承此类
 * (以备业务有所修改而不便故延伸此类)
 * 
 * @name Controller_abstract
 * @version 0.1
 * @author xiaoma 2012-6-26
 *
 */
class Controller_abstract extends Framework_YController {
	/**
	 * 初始化基类
	 *
	 */
	function __construct() {
		parent::__construct ();
	}
	
	/**
	 * 将继承类中的execute方法覆盖,方便以后对此应用单独进行配置或修改,避免直接操作基础类
	 * 
	 * @param string $action_name 	要执行的action名称
	 * @param array $args 			预留参数
	 * @author xiaoma 2012-6-26
	 */
	public function execute($action_name, array $args = array()) {
		$action_method = $this->formatActionName ( $action_name );
		$this->_before_execute ();
		$this->init ();
		$response = call_user_func_array ( array ($this, $action_method ), $args );
		$this->_after_execute ( $response );
		if (is_null ( $response ) && is_array ( $this->_view )) {
			// 如果动作没有返回值,并且 $this->view 不为 null,
			// 则假定动作要通过 $this->view 输出数据
			$config = $this->_getViewDir ();
			$response = new $this->_view_class ( $config );
			$response->setViewname ( $this->_getViewName () )->assign ( $this->_view );
			$this->_before_render ( $response );
		}
		return $response;
	}
	
	/**
	 * 执行Action前的操作
	 * 在此设置此方法为最终方法,不允许action中进行继承
	 * 此处可放置如日志系统之类的代码
	 *
	 */
	final protected function _before_execute() {
	
	}
	
	/**
	 * 执行Action后的操作
	 * 在此设置此方法为最终方法,不允许action中进行继承
	 * 此处可放置如日志系统之类的代码
	 *
	 */
	final protected function _after_execute(&$response) {
	
	}
	
	/**
	 * 显示一个提示页面,然后重定向浏览器到新地址
	 *
	 * @param string $caption	标题
	 * @param string $message	提示信息
	 * @param string $url		跳转链接
	 * @param int $delay		停留时间时间
	 * @param string $script	JS脚本
	 * @param string $viewname	使用的视图
	 *
	 * @return QView_Render_PHP
	 */
	protected function _redirectMessage($caption, $message, $url, $delay = 5, $script = '', $viewname = 'redirect_message') {
		$config = $this->_getViewDir ();
		$config ['view_script_dir'] = $config ['view_dir'];
		$response = new $this->_view_class ( $config );
		$response->setViewname ( $viewname );
		$response->assign ( array ('message_caption' => $caption, 'message_body' => $message, 'redirect_url' => $url, 'redirect_delay' => $delay, 'hidden_script' => $script ) );
		
		return $response;
	}
}

?>