PHP实现单一入口文件

基本思路

1.入口文件(通过.htaccess文件中的rewrite功能把所有请求都转向这个文件)

2.通过URL传参 访问对应类的名字及其方法

1.1.htaccess 文件


    
        Options -MultiViews
    

    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]

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)

你可能感兴趣的:(PHP实现单一入口文件)