设为首页 收藏本站
查看: 360|回复: 0

[经验分享] 用PHP开始你的MVC (一)整合你的站点入口

[复制链接]

尚未签到

发表于 2017-4-4 08:40:13 | 显示全部楼层 |阅读模式
用PHP开始你的MVC (一)整合你的站点入口
  
这是一篇介绍如何用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的配置方式用的)
<filestest>
forcetypeapplication/x-httpd-php
</files>

文件1:(test.php)

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

?>

文件2:(GoodControler.php)

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

?>

文件3:(BadControler.php)

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

?>

文件4:(Application.php)

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

functionApplication(){
}

functionparse(){
$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的动作
*/
functiongo(){
$c=new$this->controlerClass();
$c->control();
}
}

?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359857-1-1.html 上篇帖子: undefined reference to `libiconv_open 无法编译PHP libiconv 下篇帖子: PHP框架queryphp教程:入门一 Hello World
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表