================================
搭建MVC结构
================================
基于MVC,解耦合 (高内聚,低耦合),优点:易维护、易扩展
本MVC模式采用的是单一入口:
如:http://localhost/lamp45/mvc/index.php?m=stu&a=add //打开学生信息的添加界面
其中m的值stu表示访问的是StuAction a的值add表示是方法(动作)
就是访问StuAction的add方法。
1. 创建目录:
ORG 第三方扩展类
model M(模型)层目录
action A(控制)层目录
view V(视图) 层目录(smarty的模板目录)
public 公共资源目录
libs Smarty库(解压到这里即可)
view_c Smarty模板编译目录
cache Smarty静态缓存目录
configs 配置文件目录

2. 将自己写好的model类放到model目录下
model/db.class.php

3. 在ORG目录下创建一个tpl.class.php的smarty子类,用于初始化smarty(等同于以前的init.php)
代码如下:
//Smarty信息的初始化类
class Tpl extends Smarty{
public function __construct(){
parent::__construct(); //构造父类
//初始化Smarty对象中属性:
$this->template_dir = "view"; //smarty模板目录
$this->compile_dir = "view_c"; //smarty模板编译目录

$this->config_dir = "configs"; //smarty配置文件目录

$this->cache_dir = "cache"; //smarty模板静态缓存目录
//$this->caching = true; //是否开启静态缓存
//$this->cache_lifetime = 3600; //静态缓存时间(秒)

//指定定界符
$this->left_delimiter="<{"; //左定界符
$this->right_delimiter="}>"; //右定界符
}
}

4. 在action目录下创建Action类,继承Tpl类,文件名叫:action.class.php 
代码如下:
//Action的控制基类
class Action extends Tpl{
public function __construct(){
parent::__construct();
}

/**
*action初始化方法(在这个方法里根据参数a的值决定调用对应的方法)
*
*/
public function init(){
//获取a参数的值
$a = isset($_GET["a"])?$_GET["a"]:"index"; //默认值为index
//判断当前Action是否存在此方法
if(method_exists($this,$a)){
//调用此方法
$this->$a();
}else{
die("没有找到{$a}对应的方法");
}
}

}

5. 在最外层,创建一个index.php的入口文件
<?php
//网站的主入口程序

//自动加载类
function __autoload($name){
$name = strtolower($name);//转成小写
if(file_exists("./action/{$name}.class.php")){
require("./action/{$name}.class.php");
}elseif(file_exists("./model/{$name}.class.php")){
require("./model/{$name}.class.php");
}elseif(file_exists("./ORG/{$name}.class.php")){
require("./ORG/{$name}.class.php");
}elseif(file_exists("./libs/".ucfirst($name).".class.php")){
require("./libs/".ucfirst($name).".class.php");
}elseif(file_exists("./libs/sysplugins/{$name}.php")){
require("./libs/sysplugins/{$name}.php");
}else{
die("错误:没有找到对应{$name}类!");
}
}
//数据连接配置文件
require("./configs/config.php");

//获取参数m的值,并创建对应的Action对象
$mod = isset($_GET['m'])?$_GET['m']:"index";
//拼装action类名
$classname = ucfirst($mod)."Action";
//创建对应的Action对象
$action = new $classname();

//执行action的初始化(action入口)
$action->init();

6. 在configs的目录下创建一个config.php的配置文件

7. 测试:
-------------------------------------------------------------
1. 在action目录下创建一个indexaction.class.php文件
/**
* 网站入口的主Action类
*/
class IndexAction extends Action{
//默认入口方法
public function index(){
$this->assign("title","MVC的测试界面");
$this->display("index.html");
}
}
2. 在view目录下创建index.html模板页面
<html>
<head>
<title><{$title}></title>
</head>
<body>
<h2><{$title}></h2>

</body> 
</html>

smarty建的mvc环境的更多相关文章

  1. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

  2. Spring MVC 环境搭建(二)

    在Spring MVC 环境搭建(一)中我们知道 spring 的配置是通过 urlmapping 映射到控制器,然后通过实现Controller接口的handlerequest方法转向页面. 但这存 ...

  3. Spring MVC 环境搭建(一)

    一.建立 JavaWeb 项目 1.建立一个 Java 项目. 2.在项目下新建一个文件夹 webapp (命名可自取,这个目录即是网站根目录),再在该文件夹下新建一个 WEB-INF 文件夹(命名固 ...

  4. Windows Server2008 R2 MVC 环境配置

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  5. Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker)

    Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker) 一.准备工作 1.Eclipse Java EE IDE(4.4.1) 2.JDK 3.Tomc ...

  6. 详细的图文介绍如何利用XAMPP本地建站的环境配置教程

    原文:详细的图文介绍如何利用XAMPP本地建站的环境配置教程 WordPress 是一个简便快捷,用途广,人气旺的一个开源的博客建站程序.很有很多等您去发现. 简便快捷:在性能上易于操作.易于浏览: ...

  7. multipath多路径实验01-构建iscsi模拟环境

    multipath多路径实验01-构建iscsi模拟环境 前几天跟同事网上闲聊技术,吐槽之前自己没有配置过多路径的经历,虽然多路径的配置过程很简单,职责划分也应是主机或存储工程师来搞定,DBA只需要直 ...

  8. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

  9. XE10 塔建 Android 开发环境 (已测试通过)

    XE10 塔建 Android 开发环境 1. E:\DevCSS\Android\adt-bundle-windows-x86-20131030\adt-bundle-windows-x86-201 ...

随机推荐

  1. Computer Vision_18_Image Stitching:Automatic Panoramic Image Stitching using Invariant Features——2007

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  2. http服务详解(1)

    前言:要熟练掌握一个服务,首先需要非常了解这个服务的工作过程. 跨网络的主机间通讯 在建立通信连接的每一端,进程间的传输要有两个标志: IP地址和端口号,合称为套接字地址 socket address ...

  3. c语言二维数组赋值

    , n=;//行数和列数 pattern = (char**)malloc(sizeof(char*)*m);//申请一组一维指针空间. ; i<m; i++) pattern[i] = (ch ...

  4. java 接口方法超时异常处理 设置超时时间

    原文:https://blog.csdn.net/coding_1994/article/details/87728374 使用线程池另起一个线程,可以使用  newFixedThreadPool() ...

  5. linux实操_shell流程控制

    if判断: 基本语法: if [ 条件判断式 ] then 程序 elif [ 条件判断式 ] then 程序 fi 实例:请编写一个shell程序,如果输入的参数,大于60,则输出“及格了”,如果小 ...

  6. CentOS7安装Ambari2.7.4过程【离线安装】

    先配置免密码登录 修改所有结点的host 192.168.210.133 node1 192.168.210.134 node2 192.168.210.135 node3 192.168.210.1 ...

  7. c语言1博客作业09

    一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/10033 ...

  8. list 对像排序

    在C#的List操作中,针对List对象集合的排序我们可以使用OrderBy.OrderByDescending.ThenBy.ThenByDescending等方法按照特定的对象属性进行排序,其中O ...

  9. c++对c的扩展----引用类型

    变量是一个内存的别名,程序通过变量名使用内存空间,当然一个内存空间可以起多个别名么? 答案:可以,这就是c++中引用的由来,引用就是给变量起别名 引用是c++的概念!!!况且声明引用的符号&十 ...

  10. Charles破解注册

    Charles破解注册English 本页面会持续更新Charles最新版破解注册方法,建议加入收藏 Charles 4.1.2 下载Charles v4.1.2 并安装 云盘下载: Windows ...