PHP实现路由映射到指定控制器
发布时间:2020-12-12 21:40:54 所属栏目:PHP教程 来源:网络整理
导读:自定义路由的功能,指定到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的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;$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;
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'],' '.$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="rn";
}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,$errline){ self::myErrorHandler($errno,$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);
控制器啥样 ControllerUserUser.php class User{
public function getUserById(){ echo "用户信息id {$_GET['id']} 的信息"; } public function getUserList(){ echo "用户列表"; } public function getUserArticle(){ echo "用户id {$_GET['uid']} 的文章列表"; } } 效果呢: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |