通过上两节我们知道 程序通过单一入口文件的route类决定了 唯一的moudle, conttoller, action,并在最后执行了

$route->run();



    

   /**

* 执行相应的 MCA

*

*/

private function run ()

{

$filePath = APPLICATION_PATH.'/controller/'.$this->_moudle.'/'.$this->_conttoller.'.inc.php';

$isNo = 0;

if(file_exists($filePath))

{

include "$filePath";

$controller_tp = $this->_conttoller.'Controller';

$controller = new $controller_tp;



if (method_exists($controller,$this->_action.'Action'))

{

$acion_tmp = $this->_action.'Action';

$controller->$acion_tmp();

}else

{

$isNo = 1;

}



}else

{

$isNo = 1;

}



if ($isNo)

{

$filePath = APPLICATION_PATH.'/controller/default/index.inc.php';

$this->_moudle = $this->_default['module'];

$this->_conttoller = $this->_default['conttoller'];

$this->_action = $this->_default['action'];



($this->_moudle != $this->_default['module']) && include "$filePath";

$controller = new indexController;

$controller->indexAction();

}

}

 

 

当相关'Controller'文件存在时执行

 

include "$filePath";

$controller_tp = $this->_conttoller.'Controller';

$controller = new $controller_tp;



上述三行代码的意思是,根据确定好的 conttoller 包含相应文件,并实例化相应的conttoller。

      

    

$acion_tmp = $this->_action.'Action';

$controller->$acion_tmp();

 

根据相应的Action 执行相应的action

 

 

所有的  Controller 类都集成一个公用的Controller 类,本节课我们就来分析一下公共的Controller 类

<?php

/**

* 前台公共类 接口

* 实现公共部分代码

*/



/**

* 本文件只能被index。php包含

*/

defined("WEB_AUTH") || die("NO_AUTH");



/**

* 包含菜单配置文件

*/



class Controller

{

public $tpl;

public $controller;

public $body;//右边菜单

public $_route ;

public $html_;

public $tpl_;



/*

* 构造函数

*/

public function __construct()

{

$this->init();

}



/*

* 初始化变量,顶部菜单和模板

*/

protected function init()

{

global $TPL,$route;

$this->tpl = $TPL;

$this->_route = $route;

}





/**

* 模板变量传第

*/

protected function diplayTpl()

{

$this->body || $this->body = $this->_route->getActionName();

$this->tpl->assign("body",$this->body);

/*设置本控制器的模板目录*/

$this->controller ||$this->controller =$this->_route->getControllerName();

$this->tpl->assign("controller",$this->controller);

$this->tpl->display($this->layout);

}

/**

* smarty封装类

* @param string $name

* @param string $value

*/

public function assign($name,$value)

{

$this->tpl->assign($name,$value);

}



/**

* 显示另外的模板

* @param string $name

* @param string $value

*/

protected function displayOther($file)

{

$this->assign("otherTpl",TRUE);

$this->tpl->display($file);

}

/**

* 显示某个MCA的body模板

* 0=>m 1=>c =>a

*/

protected function getMcaBody($array)

{

return 'http://www.cnblogs.com/../'.$array[0].'/body/'.$array[1].'/'.$array[2];

}

/*

* 析构函数,显示页面

*/

protected function __destruct()

{

$this->tpl->_tpl_vars['otherTpl'] || $this->diplayTpl();

}

/**

* 中途退出

*/

protected function _exit($msg = "")

{

$this->assign("otherTpl",TRUE);

die($msg);

}



/**

* 用 $this->html_var=value放法给变量赋值

* 用 $this->tpl_var=value放法给变量赋值

*/

protected function __set($name,$value)

{

if(strtolower(substr($name,0,5)) == "html_" || strtolower(substr($name,0,4)) == "tpl_")

{

$this->assign(substr($name,5),$value);

}

}

}

?>



 

首先看

   

 protected function __destruct()

{

$this->tpl->_tpl_vars['otherTpl'] || $this->diplayTpl();

}

 

这是所有Controller 类 生命周期结束时候要执行的函数(搜索一下php魔术方法 查看详情)

本框架利用这时候解析模板,这样的好处是,当Controller中相关执行完相关数据处理,后自动执行相关的模板(View);而不用每次在程序最后调用模板

 

protected function __set($name,$value)

{

if(strtolower(substr($name,0,5)) == "html_" || strtolower(substr($name,0,4)) == "tpl_")

{

$this->assign(substr($name,5),$value);

}

}



这个函数简化了程序向模板传递变量的方法,以smarty为例,在程序中需要执行 $tpl->assign(‘key’,$value);

来向模板中注册变量,而此函数中简化了此方法 ,只需 $this->html_key=$value;来实现相同的作用.(利用开发环境的提示功能,在前面声明

public $html_;

public $tpl_;



更加简化了向模板注册变量

posted on 2012-01-07 11:12  tianliangle  阅读(2032)  评论(0编辑  收藏  举报