基本思路
1.入口文件(通过.htaccess文件中的rewrite功能把所有请求都转向这个文件)
2.通过URL传参 访问对应类的名字及其方法
1.1.htaccess 文件
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
2.1.动态初始化类名方法
//URL路由原理
/**
* 路由作用
* 获取url中的c和a变量,执行c类对应的方法a,实现不同的路由
*/
class App {
public $c;
public $a;
public function run()
{
$c = isset($_GET['c']) ? $_GET['c'] : "Index"; //url提供类名字的变量名
$a = isset($_GET['a']) ? $_GET['a'] : "Index"; //url提供方法名字的变量名
$c .= "Controller";
if( class_exists($c) && method_exists($c, $a) ) {
$o = new $c();
$o->$a();
}else{
echo "error";
exit();
}
}
}
2.2
$c = $_GET['c']; //获取controller
$a = $_GET['a']; //获取action
require_once AROOT.'controller/'.$c.'/'.$a.'.class.php'; //载入文件/controller/user/login.class.php
$o = new $c.'Controller'; // 新建对象userController
call_user_func(array($o,$a)); //调用对象$o(userController)里的方法$a(login)