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中利用XML技术构造远程服务(上)
Oct 09 PHP
也谈php网站在线人数统计
Apr 09 PHP
基于php-fpm的配置详解
Jun 03 PHP
php结合ajax实现赞、顶、踩功能实例
May 12 PHP
php+mysql数据库查询实例
Jan 21 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
PHP 等比例缩放图片详解及实例代码
Sep 18 PHP
php输出图像的方法实例分析
Feb 16 PHP
phpmyadmin下载、安装、配置教程
May 16 PHP
PHP中trait使用方法详细介绍
May 21 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
php-msf源码详解
Dec 25 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
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
PHP extract 将数组拆分成多个变量的函数
2010/06/30 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
python实现异步回调机制代码分享
2014/01/10 Python
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
Python3多线程操作简单示例
2018/05/22 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
机器学习实战之knn算法pandas
2019/06/22 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
员工培训邀请函
2014/01/11 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
竞选部长演讲稿
2014/04/26 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL