PHP url的pathinfo模式加载不同控制器的简单实现


Posted in PHP onAugust 12, 2016

使用自动加载和解析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();

\Controller\Index\Index.php

<?php
namespace Controller\Index;

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

效果:

PHP url的pathinfo模式加载不同控制器的简单实现

以上这篇PHP url的pathinfo模式加载不同控制器的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP生成便于打印的网页
Oct 09 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
记录PHP错误日志 display_errors与log_errors的区别
Oct 09 PHP
PHP命名空间(namespace)的动态访问及使用技巧
Aug 18 PHP
php输入数据统一类实例
Feb 23 PHP
php生成图片缩略图的方法
Apr 07 PHP
Laravel 5框架学习之路由、控制器和视图简介
Apr 07 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
php简单判断两个字符串是否相等的方法
Jul 13 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
Aug 12 #PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 #PHP
总结PHP中DateTime的常用方法
Aug 11 #PHP
php使用curl详细解析及问题汇总
Aug 11 #PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 #PHP
示例详解Laravel重置密码代码重构
Aug 10 #PHP
修改Laravel5.3中的路由文件与路径
Aug 10 #PHP
You might like
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
中国收音机工业发展史
2021/03/02 无线电
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
php微信开发接入
2016/08/27 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
python提取字典key列表的方法
2015/07/11 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
python输出数学符号实例
2020/05/11 Python
python 6种方法实现单例模式
2020/12/15 Python
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
家长给学校的建议书
2014/05/15 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
个人批评与自我批评
2014/10/15 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
python源码剖析之PyObject详解
2021/05/18 Python
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android