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学习之数据类型之间的转换代码
May 29 PHP
怎样使用php与jquery设置和读取cookies
Aug 08 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
PHP环境搭建(php+Apache+mysql)
Nov 14 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 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中使用sftp教程
2015/03/30 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
python实现异步回调机制代码分享
2014/01/10 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
教师现实表现材料
2014/02/14 职场文书
食品工程专业求职信
2014/06/15 职场文书
中学团支部工作总结
2015/08/13 职场文书
初二数学教学反思
2016/02/17 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers