php mvc中controller类实例教程

 代码如下 复制代码

$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_;

时间: 2024-11-08 21:41:49

php mvc中controller类实例教程的相关文章

asp.net MVC中Controller详细学习教程

本文我们详细介绍asp.net MVC开发模式中的C,Controller控制器. 1.Controller类 Controller的执行体现在对其Excute方法的调用,在IController这个接口里只定义了一个Excute方法,这个方法是以同步的方式执行的. public interface IController{ void Excute(RequestContext RequestContext);} 为了异步方式,在System.Web.Mvc.Async命名空间下定义了一个IAs

java-spring mvc中controller上不配置@requestMapping

问题描述 spring mvc中controller上不配置@requestMapping 进新公司,拿到新项目,发现跟之前做的项目不一样,架构是spring mvc的,controller上只有一个@controller注解,没有往常的@requestMapping注解.但是里面映射的方法却可以正常访问.发现映射的地址正是项目名.所以想问下,spring mvc 项目中,如果controller上不加@requestMapping,那么该controller默认就是映射为项目名吗?谢谢. 解决

Java开发中使用JVMTI循环类实例教程

今天我想探讨Java的另一面,我们平时不会注意到或者不会使用到的一面.更准确的说是关于底层绑定.本地代码(native code)以及如何实现一些小魔法.虽然我们不会在JVM层面上探究这是怎么实现的,但我们会通过这篇文章展示一些奇迹. 我在ZeroTurnaround的RebelLabs团队中主要工作是做研究.撰文.编程.这个公司主要开发面向Java开发者的工具,大部分以Java插件(javaagent)的方式运行.经常会遇到这种情况,如果你想在不重写JVM的前提下增强JVM或者提高它的性能,你

python中的多线程实例教程_python

本文以实例形式较为详细的讲述了Python中多线程的用法,在Python程序设计中有着比较广泛的应用.分享给大家供大家参考之用.具体分析如下: python中关于多线程的操作可以使用thread和threading模块来实现,其中thread模块在Py3中已经改名为_thread,不再推荐使用.而threading模块是在thread之上进行了封装,也是推荐使用的多线程模块,本文主要基于threading模块进行介绍.在某些版本中thread模块可能不存在,要使用dump_threading来代

php中adodbzip类实例_php技巧

本文实例讲述了php中adodbzip类程序代码.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php /**  * AdodbZip 1.1  *   * 代码示例:  * include_once 'AdodbZip.php';  * $db = AdodbZip::init(NewADOConnection('mysql教程t'));  * echo $db->GetOne('SELECT NOW()');  *   * 流程说明:  * 1. 如果$extract_dir

asp.net mvc中Controller在 fckeditor传值解决方法

环境说明: 软件环境:asp教程.net mvc3   +   vs2010 系统环境:windows xp sp3 浏览器: ie8(为了世界的和平,为了社会的稳定,为了不再被大家鄙视.我已痛改前非放弃ie6!) 上篇文章我们谈到了fckeditor在asp.net教程 mvc中的配置及其前台的方法. 我们在controller中接收view的数据情况是这样的 [httppost]         public actionresult index(formcollection form)  

ThinkPHP中ajax使用实例教程_php实例

本文实例讲述了ThinkPHP中使用ajax的方法,提交表单如下图所示: 点击提交,不需要刷新本页,将内容提交到数据库当中,并在本页显示提交的内容.如下图所示: 一.jquery实现方法: MessageAction.class.php页面代码如下: <?php class MessageAction extends Action{ function index(){ $this->display(); } function add(){ //ajaxReturn(数据,'提示信息',状态)

CSS3中遮罩使用实例教程

Css遮罩是由苹果公司添加到webkit浏览器引擎中的.遮罩提供一种基于像素级别的,可以控制元素透明度的能力,类似于png24位或png32位中的alpha透明通道的效果. 图像是由rgb三个通道以及在每个像素上定义的颜色组成的.但是在他们之上还有第四个通道,alpha通道,通过亮度定义每个像素上的透明度.白色意味着不透明,黑色意味着透明,介于黑白之间的灰色表示半透明.你可以看到下面的图片 给一个html元素使用css遮罩,就会这样处理.不用给图片应用一个alpha通道,只需要给一个图片运用一个

JavaScript MVC框架React入门实例教程

React已经成了一整套前后端通吃的 Web App 解决方案.衍生的 React Native 项目,目标更是宏伟,希望用写 Web App 的方式去写 Native App.如果能够实现,整个互联网行业都会被颠覆,因为同一组人只需要写一次 UI ,就能同时运行在服务器.浏览器和手机 既然 React 这么热门,看上去充满希望,当然应该好好学一下.从技术角度,可以满足好奇心,提高技术水平:从职业角度,有利于求职和晋升,有利于参与潜力大的项目.但是,好的 React 教程却不容易找到,这一方面因