找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 619|回复: 0
打印 上一主题 下一主题

PHP实现路由映射到指定控制器

[复制链接]

3444

主题

3465

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11142
跳转到指定楼层
楼主
发表于 2018-2-14 05:33:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            自定义路由的功能,指定到pathinfo的url上,再次升级之前的脚本
SimpleLoader.php
$v) {
  if($k==0) continue;
  $_SERVER['PATH_INFO'].="/".$v;
  }
}
}
//路由模式
public static function router($rules){
if(isset($_SERVER['PATH_INFO']) && !empty($rules)){
  $pathInfo=ltrim($_SERVER['PATH_INFO'],"/");
  foreach ($rules as $k=>$v) {
  $reg="/".$k."/i";
  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("/", $_SERVER['PATH_INFO']));
  for($i=1;$i3){
    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;
if(method_exists($controller, $_GET['a'])){
  $controller=new $class;
  $controller->$_GET['a']();
}else{
  header("HTTP/1.1 404 Not Found");
  echo "404";
}
}
//致命错误回调
public static function shutdownCallback(){
$e=error_get_last();
if(!$e) return;
self::myErrorHandler($e['type'],'
Fatal Error
'.$e['message'],$e['file'],$e['line']);
}
//错误处理
protected static function myErrorHandler($errno,$errstr,$errfile,$errline){
list($micseconds,$seconds)=explode(" ",microtime());
$micseconds=round($micseconds*1000);
$micseconds=strlen($micseconds)==1 ? '0'.$micseconds : $micseconds;
if(php_sapi_name()=="cli"){
  $break="\r\n";
}else{
  $break="
";
}
$mes="[".date("Y-m-d H:i:s",$seconds).":{$micseconds}] ".$errfile." ".$errline." line ".$errstr.$break;
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_function(function(){
  self::shutdownCallback();
});
spl_autoload_register("self::loadClass");
}
}
如何使用
index.php
'User/User/getUserList',
'^user\/(\d+)$'=>'User/User/getUserById/id/$1',
'^user\/(\d+)\/article$'=>'User/User/getUserArticle/uid/$1'
);
require_once "SimpleLoader.php";
SimpleLoader::run($rules);

控制器啥样
\Controller\User\User.php
效果呢:



以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
            
            
您可能感兴趣的文章:
  • PHP URL路由类实例
  • thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
  • php处理restful请求的路由类分享
  • php url路由入门实例
  • thinkphp的URL路由规则与配置实例
  • ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
  • Laravel 5框架学习之路由、控制器和视图简介
  • ThinkPHP路由详解
  • 自制PHP框架之路由与控制器
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端