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 mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
PHP获取当前页面完整URL的实现代码
Jun 10 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
在PHP上显示JFreechart画的统计图方法
Nov 03 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
php socket通信(tcp/udp)实例分析
Feb 14 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 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中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
srcElement表格样式
2006/09/03 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
2010/11/16 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
js实现倒计时秒杀效果
2020/03/25 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
python基础教程之常用运算符
2014/08/29 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
英语自荐信常用语句
2013/12/13 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
反对邪教标语
2014/06/30 职场文书
环保项目建议书
2014/08/26 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
运动会主持人开幕词
2016/03/04 职场文书
工伤调解协议书
2016/03/21 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
《废话连篇——致新手》——chinapizza
2022/04/05 无线电
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript