PHP中MVC框架的实现
2015-09-19 18:25
615 查看
一、目录的创建
在当前项目中创建
core:核心目录
App:网站目录
{
public:页面公共目录
controllers:控制器目录
views:存放静态页面
models:模块目录
}
index.php:项目前台入口文件
二、URL重写之隐藏index.php
项目中新建.htaccess文件
在httpd.conf文件中去掉LoadModule rewrite_module modules/mod_rewrite.so前的#号
可直接打印 $_GET['url'] 查看url
三、自动加载类文件
core中创建App.class.php
在inde.php文件中
三、解析URL——解析参数
在core目录App.class.php文件中
四、创建控制流基类
在core目录下创建Controller.class.php
在当前项目中创建
core:核心目录
App:网站目录
{
public:页面公共目录
controllers:控制器目录
views:存放静态页面
models:模块目录
}
index.php:项目前台入口文件
二、URL重写之隐藏index.php
项目中新建.htaccess文件
<span style="white-space:pre"> RewriteEngine on RewriteCond %{REQUEST_FINENAME} !-f RewriteCond %{REQUEST_FINENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]</span>
在httpd.conf文件中去掉LoadModule rewrite_module modules/mod_rewrite.so前的#号
可直接打印 $_GET['url'] 查看url
三、自动加载类文件
core中创建App.class.php
<span style="white-space:pre"> </span>public static function MyAutoloader($className) { //控制器所在的目录 $controller='app/controllers/' . $className .'.class.php'; //模型所在的目录 $model='app/models/' . $className .'.class.php'; //项目的核心目录 $core='core/' . $className .'.class.php'; //判断文件在那个目录中 if(file_exists($controller)) { require_once($controller); }else if(file_exists($model)) { require_once($model); }else if(file_exists($core)) { require_once($core); }else { throw new Exception('类文件不存在'); } }
在inde.php文件中
<span style="white-space:pre"> </span>require_once "./core/App.class.php"; //注册一个用户自定义的自动加载类方法 spl_autoload_register(array('App','MyAutoloader'));
三、解析URL——解析参数
在core目录App.class.php文件中
<span style="white-space:pre"> </span>/*** /*URL地址解析 */ protected static function parseUrl() { if(!isset($_GET['url'])) { die("无url"); } $url=explode('/' ,$_GET['url']); if(isset($url[0]) && strlen($url[0])>0) { self::$controller=$url[0]; if(isset($url[1]) && strlen($url[1])>0) { self::$method=$url[1]; unset($url[0]); unset($url[1]); } if(isset($url)) { self::$pams=array_values($url); } } } /** /*项目入口 */ public static function run() { self::parseUrl(); $con_dir='app/controllers/' . self::$controller .".class.php"; if(file_exists($con_dir)) { $c=new self::$controller; <span style="white-space:pre"> </span>} else { throw new Exception("控制器不存在"); } if(method_exists($c,self::$method)) { $m=self::$method; //判断是否参数传递 $new_pam=array(); //用于存储处理好的参数,参数名为做为数组下标 参数的值作为数组的元素值 array $num=count(self::$pams); if($num > 0) { if($num==1) { //判断参数是否为数值 if(is_numeric(self::$pams[0])) { $new_pam['id']=self::$pams[0]; } else { throw new Exception("参数异常"); } }else if($num>1){ //判断参数的名称和值是否是2的倍数 if($num % 2 ==0) { for($i=0;$i<$num;$i+=2) { $new_pam[self::$pams[$i]]=self::$pams[$i+1]; } } else { throw new Exception("参数异常"); } } $c->$m($new_pam); } else { $c->$m(); } } else { throw new Exception("方法不存在"); <span style="white-space:pre"> </span>} }
四、创建控制流基类
在core目录下创建Controller.class.php
<span style="white-space:pre"> </span><?php <span style="white-space:pre"> </span>/** <span style="white-space:pre"> </span>*所有控制器的基类 <span style="white-space:pre"> </span>*/ <span style="white-space:pre"> </span>class Controller <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>//加载指定的模板页面 <span style="white-space:pre"> </span>public function show($page, $data=array()) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>$page_dir='app/views/' .$page . '.php'; <span style="white-space:pre"> </span>if(file_exists($page_dir)) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>require $page_dir; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>?>
相关文章推荐
- PHP中SQL注入解析
- PHP防止SQL注入详解及防范
- YII框架的类自动加载机制
- PHP防止SQL注入的方法(2)
- PHP防止SQL注入的方法(1)
- PHP防止SQL注入自带函数分析
- PHP判断是否为手机客户端
- Scalaz(5)- typeclass:my typeclass scalaz style-demo
- Scalaz(5)- typeclass:my typeclass scalaz style-demo
- php多维数组的去重(针对任意的键值进行去重)--二维数组的唯一--时间复杂度~O(n)
- Thinkphp学习笔记
- thinkphp 数据库设置前缀问题 联合查询
- php 出现 500 Internal Server Error错误问题解决
- PHP 基础
- E9天嵌i.mx6q的nfs和tftp环境搭建
- windows下安装php性能分析工具XHProf
- 解决phpcms 后台更新提交更新目录出现PHP has encountered a Stack overflow错误
- Yii的where方法使用大全
- getAttribute()和getParameter()方法区别
- php设置时区和获取当前时间