zoukankan      html  css  js  c++  java
  • [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();

    ControllerIndexIndex.php

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

    效果:

  • 相关阅读:
    _DataStructure_C_Impl:图的邻接矩阵存储
    ios的单元測试OCUnit以及更新了之后的XCTestCase
    java之 ------ 可变參数和卫条件
    【能力提升】SQL Server常见问题介绍及高速解决建议
    NYOJ 116 士兵杀敌 (线段树,区间和)
    Spring和MyBatis环境整合
    TypeScript和JavaScript的一些小技巧记录
    VSCode配置TypeScript
    function 与 => 的区别
    Egret里用矢量挖圆形的洞
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5744951.html
Copyright © 2011-2022 走看看