一起学习网 一起学习网


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

网络编程 PHP url的pathinfo模式加载不同控制器的简单实现 06-22

使用自动加载和解析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();

ControllerIndexIndex.php

<?php
namespace ControllerIndex;

use ServiceUser;
class Index{
  public function __construct(){
    echo "构造方法<br/>";
  }
  public function index(){
    new User();
    print_r($_GET);
  }
  public function login(){
    echo "login()";
  }
}

效果:

查看图片

以上这篇PHP url的pathinfo模式加载不同控制器的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。

py文件转exe时包含paramiko模块出错解决方法
问题描述:python代码中包含paramiko模块的远程登录ssh,在用pyInstaller转为exe时报错,报错提示为Nohandlerscouldbefoundforlogger"paramiko.transport"出错位置:ssh=parami

PHP 自动加载的简单实现(推荐)
基于psr的规范,使用命名空间和spl_autoload_register()来实现自动加载文件结构:|--Api|--Account.php|--User.php|--Service|--Login.php|--User.php|--Application.phpApplication.phpph

php网页版聊天软件实现代码
本文实例为大家分享了php匿名聊天室的具体实现代码,供大家参考,具体内容如下1.index.htmlhtmlheadtitle聊天室/titlemetacharset="utf-8"/linkhref="http://libs.baidu.com/


编辑:一起学习网

标签:给大家,模式,代码,自动加载,文件