Maison >développement back-end >tutoriel php >php mvc中controller类实例教程_PHP教程

php mvc中controller类实例教程_PHP教程

WBOY
WBOYoriginal
2016-07-13 17:13:131088parcourir

本文章来讲述一下关于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 类

/**

 * 前台公共类 接口

 * 实现公共部分代码

 */

 

/**

 * 本文件只能被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_;

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/629229.htmlTechArticle本文章来讲述一下关于mvc中controller类教程,通过上两节我们知道 程序通过单一入口文件的route类决定了 唯一的moudle, conttoller, action,并在最...
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn