================================
搭建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. Image Processing and Analysis_8_Edge Detection:Design of steerable filters for feature detection using canny-like criteria ——2004

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  2. 网络流dinic ek模板 poj1273

    这里只是用来存放模板,几乎没有讲解,要看讲解网上应该很多吧…… ek bfs不停寻找增广路到找不到为止,找到终点时用pre回溯,O(VE^2) #include<cstdio> #incl ...

  3. Cloud Native Weekly |面对云平台宕机,企业如何止损

    KubeEdge v0.2发布 KubeEdge在18年11月24日的上海KubeCon上宣布开源的一个开源项目,旨在依托K8S的容器编排和调度能力,实现云边协同.计算下沉.海量设备的平滑接入. Ku ...

  4. windows下内存检测工具

    1.Intel的Parallel Inspector工具,和vs集成超好, 而且还带了线程检测工具. 2.Purifyhttps://www.cnblogs.com/hehehaha/archive/ ...

  5. 前端笔记-dom

    dom(document object model) -文档对象模型,包含整个页面所有功能,可以通过调用方法的形式来操作页面,所以js和dom结合在一起可以写一些逻辑性的语言 dom的对象 dom有5 ...

  6. MySQL之profiling性能分析(在5.6.14版本被丢弃)

    官方建议使用information_schema.profiling. 原因是show profile 输出了查询执行的每个步骤及其花费的时间,但是结果很难快速确定哪个步骤花费的时间最多,因为输出是按 ...

  7. 获取mysql一组数据中的第N大的值

    create table tb(name varchar(10),val int,memo varchar(20)) insert into tb values('a', 2, 'a2') inser ...

  8. eclipse p2更新官网wiki的例子

    官网的cvs好像没了,不过在github上找到一份,可用. https://github.com/anthonydahanne/make-p2-buildable-with-tycho/tree/ma ...

  9. pandas之dataframe踩坑指南(一)---apply(func)

    import pandas as pd data = pd.read_csv(r"test数据.csv", engine="python", encoding= ...

  10. android studio连接MYSQL8.0报错:java.long.unsupportedOperation处理方案

    纠结了我大概一个星期了! 下载的别人的demo测试,因为还没学线程连接网络啥的 对方使用的版本是MYSQL5.1.14,我使用的8.0.18,同样都是阿里云服务器自建数据库. 由于是版本8.0,所以在 ...