[PHP] url的pathinfo模式加载不同控制器的实现详解编程语言

使用自动加载和解析url的参数,实现调用到不同的控制器,实现了pathinfo模式和普通的url模式

文件结构:

|–Controller
  |–Index
    |–Index.php

|–Application.php

Application.php

<?php 
class Application{ 
    public static function main(){ 
        header("content-type:text/html;charset=utf-8"); 
        self::register(); 
        self::router(); 
    } 
    public static function register(){ 
        spl_autoload_register("self::loadClass"); 
    } 
    public static function loadClass($class){ 
        $class=str_replace('//', '/', $class); 
        $class="./".$class.".php"; 
        require_once $class;         
    } 
    public static function router(){ 
        if(isset($_SERVER['PATH_INFO'])){ 
            $pathinfo=array_filter(explode("/", $_SERVER['PATH_INFO'])); 
            for($i=1;$i<=count($pathinfo);$i++){ 
                $key=isset($pathinfo[$i]) ? $pathinfo[$i] : ''; 
                $value=isset($pathinfo[$i+1]) ? $pathinfo[$i+1] :""; 
                switch ($i) { 
                    case 1: 
                        $_GET['m']=ucfirst($key); 
                        break; 
                    case 2: 
                        $_GET['c']=ucfirst($key); 
                        break; 
                    case 3: 
                        $_GET['a']=$key; 
                        break; 
                    default: 
                        if($i>3){ 
                            if($i%2==0){ 
                                $_GET[$key]=$value; 
                            } 
                        } 
                        break; 
                } 
            } 
        } 
        $_GET['m']=!empty($_GET['m']) ? ucfirst($_GET['m']) : 'Index'; 
        $_GET['c']=!empty($_GET['c']) ? ucfirst($_GET['c']) : 'Index'; 
        $_GET['a']=!empty($_GET['a']) ? $_GET['a'] : 'index'; 
        $class="//Controller//{$_GET['m']}//{$_GET['c']}"; 
        $controller=new $class; 
        $controller->$_GET['a'](); 
    } 
} 
 
Application::main();

/Controller/Index/Index.php

<?php 
namespace Controller/Index; 
 
use Service/User; 
class Index{ 
    public function __construct(){ 
        echo "构造方法<br/>"; 
    } 
    public function index(){ 
        new User(); 
        print_r($_GET); 
    } 
    public function login(){ 
        echo "login()"; 
    } 
}

效果:

[PHP] url的pathinfo模式加载不同控制器的实现详解编程语言

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/12595.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论