PHP实现路由映射到指定控制器 下载本文

自定义路由的功能,指定到pathinfo的url上,再次升级之前的脚本  SimpleLoader.php <?php

class SimpleLoader{

 public static function run($rules=array()){

 header(\ self::register();

 self::commandLine();  self::router($rules);  self::pathInfo();  }

 //自动加载

 public static function loadClass($class){  $class=str_replace('\\\\', '/', $class);  $dir=str_replace('\\\\', '/', __DIR__);  $class=$dir.\ if(!file_exists($class)){

  header(\ }

 require_once $class;   }

 //命令行模式

 public static function commandLine(){  if(php_sapi_name()==\  $_SERVER['PATH_INFO']=\

  foreach ($_SERVER['argv'] as $k=>$v) {   if($k==0) continue;

  $_SERVER['PATH_INFO'].=\  }  }  }

 //路由模式

 public static function router($rules){

 if(isset($_SERVER['PATH_INFO']) && !empty($rules)){   $pathInfo=ltrim($_SERVER['PATH_INFO'],\  foreach ($rules as $k=>$v) {   $reg=\

  if(preg_match($reg,$pathInfo)){

   $res=preg_replace($reg,$v,$pathInfo);    $_SERVER['PATH_INFO']='/'.$res;   }   }

 }  }

 //pathinfo处理

 public static function pathInfo(){  if(isset($_SERVER['PATH_INFO'])){

  $pathinfo=array_filter(explode(\TH_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=new $class;

 if(method_exists($controller, $_GET['a'])){   $controller=new $class;

  $controller->$_GET['a']();  }else{

  header(\  echo \ }  }

 //致命错误回调

 public static function shutdownCallback(){

 $e=error_get_last();  if(!$e) return;

 self::myErrorHandler($e['type'],'<font color=\Error</font> '.$e['message'],$e['file'],$e['line']);  }

 //错误处理

 protected static function myErrorHandler($errno,$errstr,$errfile,$errline){  list($micseconds,$seconds)=explode(\  $micseconds=round($micseconds*1000);

 $micseconds=strlen($micseconds)==1 ? '0'.$micseconds : $micseconds;  if(php_sapi_name()==\   $break=\  }else{

  $break=\  }

 $mes=\\

 echo $mes;   }

 //注册

 public static function register(){  error_reporting(0);

 set_error_handler(function($errno,$errstr,$errfile,$errline){   self::myErrorHandler($errno,$errstr,$errfile,$errline);  });

 register_shutdown_fun\\User\\User.php <?php

namespace Controller\\User; class User{

 public function getUserById(){

 echo \用户信息id {$_GET['id']} 的信息\  }

 public function getUserList(){  echo \用户列表\  }

 public function getUserArticle(){

 echo \用户id {$_GET['uid']} 的文章列表\  } } 

以上就是本文的全部内容,希望对大家的学习有所帮助