Heim >php教程 >php手册 >php mvc中controller类实例教程

php mvc中controller类实例教程

WBOY
WBOYOriginal
2016-05-25 16:46:491045Durchsuche

本文章来讲述一下关于mvc中controller类教程,通过上两节我们知道 程序通过单一入口文件的route类决定了 唯一的moudle, conttoller, action,并在最后执行了

实例代码如下:

<?php
$route->run();
/** 
 * 执行相应的 MCA
 *
 */
private function run() {
    $filePath = APPLICATION_PATH . &#39;/controller/&#39; . $this->_moudle . &#39;/&#39; . $this->_conttoller . &#39;.inc.php&#39;;
    $isNo = 0;
    if (file_exists($filePath)) {
        include "$filePath";
        $controller_tp = $this->_conttoller . &#39;Controller&#39;;
        $controller = new $controller_tp;
        if (method_exists($controller, $this->_action . &#39;Action&#39;)) {
            $acion_tmp = $this->_action . &#39;Action&#39;;
            $controller->$acion_tmp();
        } else {
            $isNo = 1;
        }
    } else {
        $isNo = 1;
    }
    if ($isNo) {
        $filePath = APPLICATION_PATH . &#39;/controller/default/index.inc.php&#39;;
        $this->_moudle = $this->_default[&#39;module&#39;];
        $this->_conttoller = $this->_default[&#39;conttoller&#39;];
        $this->_action = $this->_default[&#39;action&#39;];
        ($this->_moudle != $this->_default[&#39;module&#39;]) && 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 &#39;http://www.cnblogs.com/../&#39; . $array[0] . &#39;/body/&#39; . $array[1] . &#39;/&#39; . $array[2];
        }
        /*
         * 析构函数,显示页面
        */
        protected function __destruct() {
            $this->tpl->_tpl_vars[&#39;otherTpl&#39;] || $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_; 

  


永久地址:

转载随意~请带上教程地址吧^^

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn