使用自动加载和解析url的参数,实现调用到不同的控制器,实现了pathinfo模式和普通的url模式
文件结构:
|--Controller
|--Index
|--Index.php
|--Application.php
Application.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?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模式加载不同控制器的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。