PHP url的pathinfo模式加载不同控制器的简单实现_php实例

使用自动加载和解析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
锐捷ac控制器配置实例、thinkphp实例化控制器、pid控制器设计实例、pid控制器应用实例、思科ac控制器配置实例,以便于您获取更多的相关知识。

时间: 2024-09-27 23:42:38

PHP url的pathinfo模式加载不同控制器的简单实现_php实例的相关文章

PHP url的pathinfo模式加载不同控制器的简单实现

使用自动加载和解析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::regi

codeigniter中实现一次性加载多个view的方法_php实例

本文实例讲述了codeigniter中实现一次性加载多个view的方法.分享给大家供大家参考.具体如下: function somecontrollerfunction() { $data['pagetitle'] = "Welcome to jb51.net"; $this->load->view('pageheader', $data); $this->load->view('pagenav'); $this->load->view('pagec

php技术实现加载字体并保存成图片_php实例

下面通过一段代码给大家详解介绍下php技术实现加载字体并保存成图片. // Set the content-type header("Content-type: image/png"); // Create the image $im = imagecreatetruecolor(400, 100); // Create some colors $white = imagecolorallocate($im, 255, 255, 255); $grey = imagecolorallo

Extjs如何获取后台方法返回的值然后前台接收值再把此值放入action url里进行load加载

问题描述 Extjs如何获取后台方法返回的值然后前台接收值再把此值放入action url里进行load加载 前台://把上传的 文件发送到相应Action function upload(){ var tml = document.getElementById(""fileId""); if(tml.value == ''){ Ext.MessageBox.alert('提示''请选择需要上传文件'); return; } Ext.Ajax.request({ u

script的async属性以非阻塞的模式加载脚本_javascript技巧

1.HTML5实现了script的async属性,这个新的属性可以让js在浏览器中以非阻塞的模式加载,另外script还有一个defer属性,这个属性目前所有浏览器都已实现(除了firefox和chrome的早期版本),IE这方面做得好,从一开始就支持些属性. 复制代码 代码如下: //async <script async src="dquery.js" async></script> //defer <script async src="dq

php命令行(cli)模式下报require 加载路径错误的解决方法_php技巧

今天,同事突然告诉我,我写的一个做计划任务的php脚本执行总是不成功. 脚本本身很简单,里面只有包含了几个库文件并执行了一个函数,函数应该没有错误,这个函数在别处也调用过,没有问题.我在本地用浏览器访问页面,执行成功,看来没有问题,我有点怀疑是同事的计划任务的问题.我又打开命令行,用php直接执行脚本,这回报错了,是require 包含文件错误,看来是路径不对. 不明白是什么原因引起的,只是从报错来看是路径不对,我猜测是跟相对路径有关,于是把相对路径的全部改成绝对路径,再执行,问题解决. 在百度

提高网页加载速度的初步简单技巧方式

网页的加载速度是评估网站质量一个重要指标.原因在于大多数用户能够容忍的网页加载时间只有几秒,如果超出了访客的忍受范围他们会毫不留情地关掉你的网 页,所以网页载入速度会极大地影响网站的流量和访问.以下总结了几种可以明显提高网站加载速度的初步简单技巧方式,如果你的网站存在载入速度慢的问题不妨 与此为参考对网页做些初步优化. 网页加载提速之 – 优化网页图片文件 你的网页一定有图片,加载一个网页往往图片的总尺寸是最大的,特别是那些颜色丰富的背景图片和大副广告图片.所以一般要在同等图片质量的情况下要尽可

WinForm ListView 大数据提高加载速度的方法 虚拟模式加载

将VirtualMode 属性设置为 true 会将 ListView 置于虚拟模式.控件不再使用Collection.Add()这种方式来添加数据,取而代之的是使用RetrieveVirtualItem(Occurs when the ListView is in virtual mode and requires a ListViewItem.)和CacheVirtualItems两个事件,单独使用RetrieveVirtualItem也可以,CacheVirtualItems这个事件主要是

iOS中UIWebView网页加载组件的基础及使用技巧实例_IOS

基本用法示例 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIWebView * webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 20, ScreenWidth, ScreenHeight-20)]; // 自动队页面进行缩放以适应屏幕 webView.scalesPageToFit = Y