设为首页 收藏本站
查看: 863|回复: 0

[经验分享] php mvc开发系列教程第三节 Controller 类实现

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-25 11:38:54 | 显示全部楼层 |阅读模式
  通过上两节我们知道 程序通过单一入口文件的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_;


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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103987-1-1.html 上篇帖子: 从零开始学习php环境的配置 下篇帖子: PHP发短信 PEAR 包:Services_Sms
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表