自定义路由的功能,指定到pathinfo的url上,再次升级之前的脚本
SimpleLoader.php
<?php
class SimpleLoader{
public static function run($rules=array()){
header(\"content-type:text/html;charset=utf-8\");
self::register();
self::commandLine();
self::router($rules);
self::pathInfo();
}
//自动加载
public static function loadClass($class){
$class=str_replace(\'\\\\\', \'/\', $class);
$dir=str_replace(\'\\\\\', \'/\', __DIR__);
$class=$dir.\"/\".$class.\".php\";
if(!file_exists($class)){
header(\"HTTP/1.1 404 Not Found\");
}
require_once $class;
}
//命令行模式
public static function commandLine(){
if(php_sapi_name()==\"cli\"){
$_SERVER[\'PATH_INFO\']=\"\";
foreach ($_SERVER[\'argv\'] as $k=>$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\'],\'<font color=\"red\">Fatal Error</font> \'.$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=\"<br/>\";
}
$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
<?php //路由映射 $rules=array( \'^user$\'=>\'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
namespace Controller\\User;
class User{
public function getUserById(){
echo \"用户信息id {$_GET[\'id\']} 的信息\";
}
public function getUserList(){
echo \"用户列表\";
}
public function getUserArticle(){
echo \"用户id {$_GET[\'uid\']} 的文章列表\";
}
}
效果呢:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持phpstudy。
本文地址:https://www.stayed.cn/item/19713
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我