#########用PHP开始你的MVC########(一)整合你的站点入口

hahawen 2004-04-29 06:03:50
这是一篇介绍如何用php来实现MVC模式开发的文件。关于MVC模式的技术文章网上随处可以,所以这篇文件将不再讲述这种模式的优缺点(实际上是我说不清楚),子讲他的php技术实现。并且在以后的系列文章中也是以讲技术为主。

一、实现统一的网站入口(在MVC中调用Controler层的方法,也就是控制层)


大家也许经常在网上看到这样的路径(http://www.aaa.com/aaa/bbb/aaa?id=5),让人不解,这样的网站的实现方式有几种可能性:
1、隐藏文件的扩展名,对这种做法的好处,众说纷纭,不过个人觉得没有必要;
2、用了网站的重定向规则,实现虚拟路径;
3、强制文件解析的方式,实现虚拟路径。
用第2\3种方法可以实现网站的统一接口,合理的整合网站,更好的体现网站的安全性和架构,用这两种方式的网站大多是使用“MVC”模式构建和实现的。


下面是一个例子

访问路径如下:
....../test/*******/Bad
....../test/*******/Good
(其中的"******"可以用任何字符串替换,"......."是你的web路径)

文件的目录结构如下
|-- .htaccess
|-- test
|-- Application.php
|-- Controler/GoodControler.php
|-- Controler/BadControler.php

注意 文件".htaccess",在windows下不能直接建立的,可以在命令行模式下建立.


文件0:(.htaccess)(这个文件是更改apache的配置方式用的)
<files test>
forcetype application/x-httpd-php
</files>


文件1:(test.php)

<?php
/*-------------------------------------
* test.php
*
* 作为你的网站的入口的文件
* 用来初始化和入口
* 调用执行Controler的调用
*
-------------------------------------*/
require "Application.php";
$aa = new Application();
$aa->parse();
$aa->go();

?>

文件2:(GoodControler.php)

<?php
/*-------------------------------------
* GoodControler.php
*
* 用来控制 url=/test/Good 来的访问
*
-------------------------------------*/
class GoodControler{
/*
* 控制类的调用方法,唯一的报漏给外部的接口
*/
function control(){
echo "this is from GoodControler url=*********/test/Good";
}
}

?>

文件3:(BadControler.php)

<?php
/*-------------------------------------
* BadControler.php
*
* 用来控制 url=/test/Bad 来的访问
*
-------------------------------------*/
class BadControler{
/*
* 控制类的调用方法,唯一的报漏给外部的接口
*/
function control(){
echo "this is from GoodControler url=*********/test/Bad";
}
}

?>

文件4:(Application.php)

<?php
/*-------------------------------------
* Application.php
*
* 用来实现网站的统一入口,调用Controler类
*
-------------------------------------*/
class Application{
//用来记录所要进行的操作
var $action;
//controler文件的路径名
var $controlerFile;
//controler的类名
var $controlerClass;

function Application(){
}

function parse(){
$this->_parsePath();
$this->_getControlerFile();
$this->_getControlerClassname();
}
/*
* 解析当前的访问路径,得到要进行动作
*/
function _parsePath(){
list($path, $param) = explode("?", $_SERVER["REQUEST_URI"]);
$pos = strrpos($path, "/");
$this->action = substr($path, $pos+1);
}
/*
* 通过动作$action,解析得到该$action要用到的controler文件的路径
*/
function _getControlerFile(){
$this->controlerFile = "./Controler/".$this->action."Controler.php";
if(!file_exists($this->controlerFile))
die("Controler文件名(".$this->controlerFile.")解析错误");
require_once $this->controlerFile;
}
/*
* 通过动作$action,解析得到该$action要用到的controler类名
*/
function _getControlerClassname(){
$this->controlerClass = $this->action."Controler";
if(!class_exists($this->controlerClass))
die("Controler类名(".$this->controlerClass.")解析错误");
}
/*
* 调用controler,执行controler的动作
*/
function go(){
$c = new $this->controlerClass();
$c->control();
}
}

?>
...全文
167 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
ashchen 2004-05-11
  • 打赏
  • 举报
回复
去掉.php真的很时髦吗?不行我也得研究研究
至于.htaccess 完全可以改成其他得文件名,当然配置文件里相关内容也要改,这个比较简单
hahawen 2004-05-11
  • 打赏
  • 举报
回复
顶最后一次
xinyaoxp 2004-05-10
  • 打赏
  • 举报
回复
showerXP 2004-05-03
  • 打赏
  • 举报
回复
5.3
我帮你把这类帖子顶上去。
hahawen 2004-04-30
  • 打赏
  • 举报
回复
to :mikespook(谁说叫Mike的一定是狼?)
不用那么麻烦,就那么一行就可以的,我原来也是用RewriteEngine 配置过,但是效果不好,使用rewrite模块后,path_info信息得不到的!

你可以试试阿
xinyaoxp 2004-04-30
  • 打赏
  • 举报
回复
up
flyonet 2004-04-30
  • 打赏
  • 举报
回复
mark
feyge 2004-04-30
  • 打赏
  • 举报
回复
sign
mikespook 2004-04-30
  • 打赏
  • 举报
回复
问个白痴点的问题~~~

这样http://www.aaa.com/aaa/bbb/aaa?id=5的访问方式恐怕
<files test>
forcetype application/x-httpd-php
</files>
只如此一行不行吧?

我是看了
http://forum.douzhe.com/forum/viewtopic.php?t=845
这个文章~

所以对我的论坛做了改动
http://www.xxiyy.com/phpBB2/8
像这样~~~

但是我在APACHE里还增加了
RewriteEngine On
RewriteBase /forum
RewriteCond %{REQUEST_URI} ^/forum.*
RewriteRule ^([0-9]+)\.html$ viewtopic.php?t=$1 [L]
RewriteRule ^([0-9]+)$ viewforum.php?f=$1 [L]
RewriteRule ^c([0-9]+)$ index.php?c=$1 [L]
这样的内容,才把地址替换过来~~~

如果不增加Rewrite功能的话,使用
http://www.aaa.com/aaa/bbb/aaa?id=5
访问,apache如何知道是在访问哪个文件?难道把扩展名都改成空?
feixuehenshui 2004-04-30
  • 打赏
  • 举报
回复
收藏先
hahawen 2004-04-30
  • 打赏
  • 举报
回复
o
hahawen 2004-04-30
  • 打赏
  • 举报
回复
ding
hahawen 2004-04-30
  • 打赏
  • 举报
回复
to: mikespook(谁说叫Mike的一定是狼?)
是的.
nullfox 2004-04-30
  • 打赏
  • 举报
回复
.htaccess 上传到UNIX服务器上 自动识别为隐藏文件保护起来了
删都没法删呢
mikespook 2004-04-30
  • 打赏
  • 举报
回复
对 APACHE 我了解不多~~~
我不明白的是这样的~~

使用
http://www.aaa.com/aaa/bbb/aaa?id=5
来访问~~~那么是不是需要把文件名改为aaa,比如原来是aaa.php~~

使用Rewrite的话可以做到WEB服务器替换搜索,然后Response内容~~~
但是如果不用的话,那APACHE找不到aaa这个文件,不是404错误了?
jessicax25 2004-04-30
  • 打赏
  • 举报
回复
师傅还没升级啊?我现在没时间来CSDN了,5555.
mistjin 2004-04-29
  • 打赏
  • 举报
回复
非常感谢你的回答,
对我无关的问题暂用了你的帖子表示抱歉!
我新建了一个文件夹test,加进去了你的
<files test>
forcetype application/x-httpd-php
</files>
用localhost/test/访问还是不行。

我会新建一个帖子提问!
hahawen 2004-04-29
  • 打赏
  • 举报
回复
你可以再建一个文件夹,把我列的文件都放在新建的目录下面就可以了。或者把
我的.htaccess文件里的内容加到你的.htaccess文件后面,也可以的。
mistjin 2004-04-29
  • 打赏
  • 举报
回复
我的.htaccess文件
AuthType basic
AuthName "Please Enter Your Name and Password:"
Authuserfile C:/Apache/Apache2/htdocs/OOP/mvc/passwd
require user testuser1

passwd 文件
testuser1:$apr1$kz1.....$F8hCknrL58dV.HhI3Rp5g.
mistjin 2004-04-29
  • 打赏
  • 举报
回复

没什么报错啊,就是什么反应也没有!!!!


加载更多回复(7)
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 全国计算机等级考试二级教程《Python语言程序设计》(2018年版)被视为针对Python入门者和备考人员的核心学习材料。该资料汇总了教材内的所有编程练习答案,这些答案在Python 3.5.3环境中经过实际执行测试,从而保障了代码的准确性和应用价值。备考人员借助这些答案,能够评估自身的学习进度,并深入理解和熟练掌握Python编程的基础原理与方法。 1. Python基础理论:Python作为一门高级编程语言,因其简明扼要的语法结构和卓越的功能表现而备受推崇。基础内容涵盖了变量、数据种类(例如整型、浮点型、字符串、布尔型、列表、元组、字典、集合)、逻辑控制(比如条件判断if-else,循环控制for、while)、函数的声明及使用、模块的引入等。 2. Python高级应用:Python的进阶内容涉及异常管理(try-except-finally结构),类与实例(面向对象编程的基础,包含类的构造、对象的生成、属性与方法的运用、继承机制、多态表现),装饰器(用于调整函数或类的功能特性),上下文管理器(借助with语句实现资源管理)等。 3. 数据文件处理:Python配备了全面的文件操作功能,涉及文件的开启、数据读写、关闭操作,以及多种操作模式(例如r模式用于读取,w模式用于写入,a模式用于追加内容等)。此外,还包括文本文件与二进制文件的转换处理,以及文件的位置调整、复制和删除等操作。 4. 标准库的运用:Python的标准库资源极为丰富,比如os模块提供操作系统接口,sys模块用于获取系统参数,random模块可用于生成随机数值,datetime模块负责处...
代码下载地址: https://pan.quark.cn/s/664854f01855 TCP/IP SOCKET协议构成了互联网通信的基石,它明确了网络设备之间数据交换的规范。TCP(Transmission Control Protocol)是一种以连接为导向、具备可靠性且基于字节流的传输层通信规范,而UDP(User Datagram Protocol)则是一种非连接型且不可靠的传输协议。在实施TCP/IP SOCKET的调试工作中,专业的软件能够协助开发者更清晰地洞察网络通信的流程,精准地找出故障点,并对代码进行改进。 "TCP模拟调试工具"即为一种实用的辅助性软件,它赋予用户模拟TCP连接、发送及接收数据的能力,从而对网络应用程序进行测试和调试。此工具或许具备以下几项功能: 1. **连接模拟**:可以模拟客户端与服务器之间TCP连接的完整过程,涵盖三次握手和四次挥手阶段,从而帮助理解TCP连接的完整生命周期。 2. **数据发送与接收**:支持自定义数据包的发送,并能显示接收到的数据,这对于核实数据传输的准确性极为关键。 3. **错误检测与重传**:TCP协议内含错误检测和丢失数据自动重传的机制,该工具或许能够模拟这些场景,助力开发者测试其应用的容错性能。 4. **流量控制与拥塞控制**:TCP通过滑动窗口机制实现流量控制与拥塞管理,工具或许提供查看和调整这些参数的选项。 5. **端口监听**:能够监听指定的端口,观察数据的进出情况,这对于服务器端程序的调试尤为有益。 6. **日志记录**:记录所有通信事件,便于后续的分析与问题定位。 7. **多线程支持**:针对处理多个并发连接的程序,工具或许提供多线程或并发会话的模拟。 8. **协议解...

21,889

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧