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 相关文章推荐
Zend引擎的发展 [15]
Oct 09 PHP
PHP 反射机制实现动态代理的代码
Oct 22 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
Nov 05 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
PHP性能分析工具XHProf安装使用教程
May 13 PHP
四个PHP非常实用的功能
Sep 29 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
PHP机器学习库php-ml的简单测试和使用方法
Jul 14 PHP
php+mysql开发中的经验与常识小结
Mar 25 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 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
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
python tornado微信开发入门代码
2018/08/24 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Keras loss函数剖析
2020/07/06 Python
pycharm永久激活超详细教程
2020/10/29 Python
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
初二政治教学反思
2014/01/12 职场文书
企业文化建设实施方案
2014/03/22 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
2015年教学工作总结
2015/04/02 职场文书
老公出轨后的保证书
2015/05/08 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
Mysql基础知识点汇总
2021/05/26 MySQL
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL
MySQL限制查询和数据排序介绍
2022/03/25 MySQL