服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > php教程 >

php mvc中controller类实例教程

时间:2016-02-26 23:44来源: 作者: 点击:
关于mvc中controller类教程,通过上两节我们知道 程序通过单一入口文件的route类决定了 唯一的moudle, conttoller, action,并在最后执行了 实例代码如下: $route-run(); /** * 执行相应的 MCA * */ privat
关于mvc中controller类教程,通过上两节我们知道 程序通过单一入口文件的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_; 
(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容