from: http://www.phpx.com/cma3005.html
MVC with PHP(二)
作者: teacherli [文章出自: www.phpx.com]
MVC with PHP(一)中的bug的问题是存在,最大的问题是日志系统的问题,等完成这这个介绍后我后把全部更正的程序源码打包
出来,这里就暂时不做更改了.
先来看看在application.class.php中是如何建立controller实例的:
PHP代码:--------------------------------------------------------------------------------
/**
* 执行函数
*
* 此类唯一对外的一个接口
**/
public function run()
{
$this->parsePath();
$this->checkSecurity($this->module, $this->action);
1. $controller = new $this->controllerClassName();
2. $controller->{$this->action}();
$this->writeLog($this->module, $this->action);
}
--------------------------------------------------------------------------------
Application这个类在实例后唯一可进行调用的一个函数,它根据用户的URL请求来分析得出所需要的Controller类名,然后实例化这个类(上面标1的地方),再调用从URL中获取的动作名称(上面标2的地方),
这个举一个简单的例子:
URL: http://localhost/?module=news&action=showList
Application通过分析这个URL重到controllerClassName=news, action=showList,然后它将在包含处理这个controller类的文件名(在Application->getControllerFile()中进行),然后实例化News这个
controller类(标1的地方), 随后调用它的动作showList(标2的地方).
来看看newsController.php中的内容:
=============================================================
PHP代码:--------------------------------------------------------------------------------
<?php
/**
* FileName: newsController.php
* Introduce: 新闻控制类
*
* @author: 大师兄
* @Email: teacherli@163.com
* @version $Id$
* @copyright 2004-10-26
**/
include_once ("./controller/comm/controller.class.php");
include_once ("./model/news/newsModel.php");
class NewsController extends Controller
{
private $model;
/**
* 构造函数
*
**/
public function __construct()
{
parent::__construct();
$this->model = new NewsModel();
$this->setSmartyTemplate_dir("./view/news");
}
/**
* 显示新闻列表
*
**/
public function showList()
{
1. $newsList = & $this->model->getList();
2. $this->smarty->assign("newsList", $newsList);
3. unset($newsList);
4. $this->smarty->display("newsList.html");
}
}
?>
--------------------------------------------------------------------------------
==============================================================
首先,NewsController类继承自公共类Controller,在类进行初始化时产生一个NewsModel类,这个类是一个model类,由这个类负责新闻模块所有的对数据库的交互. parent::__construct()调用父类的构造函数,完成对view的控制类Smarty的初始化.$this->setSmartyTemplate_dir("./view/news")将模板目录定位在./view/news目录.
然后看我们上面的例子,请求URL为http://localhost/?module=news&actio...List,表示要调用
showList这个动作,看NewsController类的showList()成员函数:
1. $newsList = & $this->model->getList(): $this->model在NewsController初始化时建立,这一句要使用$this->model从数据库里提取出一个新闻列表,这个列表当然就是Smarty在操作循环块时需要的二维数组了,在NewsModel类中,它是采用ADODB回传的一个二维数组.
2. $this->smarty->assign("newsList", $newsList): 熟悉吧,smarty中循环块的程序控制
3. unset($newsList):考虑到效率问题,对于这些临时变量在使用完成后即时将它unset。
4. $this->smarty->display("newsList.html"):使用smarty来显示view.
大家看明白了吗?实际上controller类要做的事情就是这样:1.调用model从数据库取出记录 2.操
作Smarty显示view。
再来看看NewsController的父类Controller类的源码:
===========================================================
PHP代码:--------------------------------------------------------------------------------
<?php
/**
* FileName: controller.class.php
* Introduce: Base class of controller
*
* @author: 李晓军
* @Email: teacherli@163.com
* @version $Id$
* @copyright 2004-10-26
**/
include_once ("./comm/smarty/Smarty.class.php");
include_once ("./comm/config.inc.php");
abstract class Controller
{
private $smarty;
/**
* 系统构建函数
* 初始化Smarty
**/
function __construct()
{
$this ->smarty = new Smarty();
$this->smarty->template_dir = "./view/templates";
$this->smarty->compile_dir = "./view/templates_c";
$this->smarty->cache_dir = "./view/cache";
$this->smarty->cache_lifetime = 60 * 60 * 24;
$this->smarty->caching = false;
$this->smarty->left_delimiter = "<{";
$this->smarty->right_delimiter = "}>";
}
/**
* 设置smarty模板路径
*
* @param string $template
**/
public function setSmartyTemplate_dir($template)
{
$this->smarty->template_dir = $template;
}
/**
* 设置smarty是否进行缓存
*
* @param boolean $cache
**/
public function setSmartyCache($cache = false)
{
$this->smarty->cache = $cache;
}
/**
* 设置smarty缓存时间
*
* @param string $cacheLifetime
**/
public function setSmartyCacheTime($cacheLifetime)
{
$this->smarty->cache_lifetime = $cacheLifetime;
}
/**
* 动作被执行后一个短暂的提示
*
* @param string $module 重新定向到的模块名称
* @param string $action 重新定向的动作名称
* @param string $params 参数名称
* @param string $message 提示信息
**/
public function redirect($module, $action, $params="", $message="动作已经被成功执
行")
{
$time = WAIT_FOR_TIME;
$params = ("" == $params) ? "" : "&$params";
$URL = "?module=" . $module . "&action=" . $action . $params;
//重新定Smarty模板目录至公用目录
$this->setSmartyTemplate_dir("./view/templates");
$this->smarty->assign("URL", $URL); //重定向的目录
$this->smarty->assign("message", $message); //提示信息
$this->smarty->assign("time", $time);
$this->smarty->display("wait.html");
}
/**
* 调用本类不存在的方法时进行的处理
*
* @param string $name
* @param string $parameter
**/
public function __call($name, $parameter)
{
throw new ActionNotAllowException("对不起,你所请求的动作 <b>$name</b> 没有定义
...<br>");
}
/**
* 析构函数
*
**/
public function __destruct()
{
unset($this->smarty);
}
}
?>
--------------------------------------------------------------------------------
==============================================
Controller是一个抽象类,也就是说它不可以直接使用new 来产生一个实例对象,在类的构造函数里产生一个Smarty类,并对其进行基本的设置。其它的几个函数是对Smarty对象进行设置的成员函数, 这里来看看这两个函数:
public function redirect($module, $action, $params="", $message="动作已经被成功执行"):
这是一个重新定向成员函数,它的作用是当我们对模块进行一些操作后给出的提示页面,然后经过设置好的时间自动重新定向到另一个位置,例如我们要对新闻进行一些删除,删除成功后我们要给用户返回这样一个页面,告诉用户操作已经成功,请待n秒后自动返回....这在论坛中是很常见的,这里我也引用了这样的策略。
public function __call($name, $parameter):
当类调用类没有声明的函数时使用这个函数进行处理,这可是个好东东,有了它,可以使用对程序
的控制更加简单了,大家可以试试这个方法....
好了,Controller 部分就谈到这里了。
happyBot自动摘抄自喜悦村精华帖,查看原帖获得完整内容:
http://www.phpx.com/happy/top92561.html
分享到:
相关推荐
oriented programming concepts with PHP. PHP is one of the most popular languages for web application development, and ... It includes suggestions to help you to write good code. Moreover this book ...
此源代码旨在使用 MVC 概念开发网站和/或 PHP 应用程序
PHP MVC framework to create web applications in standard way, with many extensions and examples, with option to pack whole project.zip
PacktPub.Programming.with.CodeIgniter.MVC.Sep.2013
Set up the PHP environment and get started with web programming Leverage the potential of PHP for server-side programming, memory management, and object-oriented programming (OOP) This book is packed ...
Moovico 是一个快速且可扩展的 MVC 框架和基于 PHP 的 ORM。 特征 因此,基于 PHP 的几乎可以安装在任何(共享)托管环境上。 带有免费的 MySQLi 数据库接口(更多数据库即将推出)。 包括一个带有 CRUD 接口的...
Cleanly interact with data objects Efficient use of server resources in content delivery Useful shared class libraries to speed up development Unit testing to ensure maximum stability
In just one weekend with this SitePoint book, you'll learn how to: Install all of the software you need to begin developing PHP applications Understand PHP functions and syntax Build a complete, ...
PHP MVC框架,支持路由 安装: Run “composer install” 创建数据库并将数据库凭据添加到.env文件后, 要应用迁移: run the file like “php migrations.php” 这将创建一个[users]表,其中包含以下列:[email]...
Get started with PHP and MySQL programming: no experience necessary. This fifth edition of a classic best-seller includes detailed instructions for configuring the ultimate PHP 7 and MySQL development...
详细的介绍了PHP5面向对象的技术,以及自己制作mvc框架!英文版的啊!
PHP-MVC-JQuery 圣地亚哥·索勒·林#Build with jQuery查询JS PHP 引导程序CSS #页面家店铺
Each module is a mini course in its own right, taking your basic PHP programing skills to the next level by showing you intermediate to advanced PHP techniques with a focus on PHP 7. This way, get ...
Oriented PHP Advanced OOP Features Error and Exception Handling ...with Smarty Web Services Secure PHP Programming SQLite Building Web Sites for the World MVC and the Zend Framework Introducing MySQL...
Packed with real-life examples to help the readers implement concepts as they learn Who This Book Is For This book is for those who have basic experience in PHP programming. If you are developing ...
An agile, small, productive and robust MVC framework for PHP (with integrated AJAX support). micro-MVC is a simple, agile and powerful MVC framework that empowers developers to write AJAX-based or MVC...
bug with CakePhp MVC directories crash on Locals Window some crashes while code editing some crashes on close files problem with same file names by SFTP some incorrect highlighting for Starty ...
bug with CakePhp MVC directories crash on Locals Window some crashes while code editing some crashes on close files problem with same file names by SFTP some incorrect highlighting for Starty ...