一、目录的创建
在当前项目中创建
core:核心目录
App:网站目录
{
public:页面公共目录
controllers:控制器目录
views:存放静态页面
models:模块目录
}
index.php:项目前台入口文件
二、URL重写之隐藏index.php
项目中新建.htaccess文件
RewriteEngine on
RewriteCond %{REQUEST_FINENAME} !-f
RewriteCond %{REQUEST_FINENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
在httpd.conf文件中去掉LoadModule rewrite_module modules/mod_rewrite.so前的#号
可直接打印 $_GET['url'] 查看url
三、自动加载类文件
core中创建App.class.php
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文件中
require_once "./core/App.class.php";
//注册一个用户自定义的自动加载类方法
spl_autoload_register(array('App','MyAutoloader'));
三、解析URL——解析参数
在core目录App.class.php文件中
/***
/*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;
}
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
{
$new_pam[self::$pams[$i]]=self::$pams[$i+1];
}
}
else
{
throw new Exception("参数异常");
}
}
$c->$m($new_pam);
}
else
{
$c->$m();
}
}
else
{
throw new Exception("方法不存在");
}
}
四、创建控制流基类
在core目录下创建Controller.class.php
/**
*所有控制器的基类
*/
class Controller
{
//加载指定的模板页面
public function show($page, $data=array())
{
$page_dir='app/views/' .$page . '.php';
if(file_exists($page_dir))
{
require $page_dir;
}
}
}
?>