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中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
Apr 14 PHP
php生成随机数的三种方法
Sep 10 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
Yii全局函数用法示例
Jan 22 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 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
10个可以简化php开发过程的MySQL工具
2010/04/11 PHP
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
window.open的功能全解析
2006/10/10 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
python cs架构实现简单文件传输
2020/03/20 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
竞聘演讲稿范文
2014/01/12 职场文书
报社实习生自荐信
2014/01/24 职场文书
副处级干部考察材料
2014/05/17 职场文书
优秀求职信
2014/05/29 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
php去除deprecated的实例方法
2021/11/17 PHP