ホームページ >バックエンド開発 >PHPチュートリアル >php フレームワークの実装方法 連載記事 [4] URL ルーティング管理

php フレームワークの実装方法 連載記事 [4] URL ルーティング管理

WBOY
WBOYオリジナル
2016-06-23 13:16:34800ブラウズ


($ CTL) 関数 ($ ACT)

, _u=$ctl .$act

イージーモード

_easy=$app.$tpl。 $ctl.$act

_easy=$app.$ctl.$act

_Web 開発では、通常、フロントエンド ページを次のように出力します。 $act, $act 処理関数が実装されていない場合は、対応するフロントエンド テンプレート ファイルが自動的に検索されて表示されます。

このルーティング モードは、単純な表示ページに適しています

URL 書き換えモード (nginx または Apache の設定が必要)

a pache : ^rewrite[./](.*)$ /index. =$1 [R,QSA]

nginx: 書き換え ^/rewrite[./](.*)$ /index.php?_rewrite=$1 last;

書き換えます。{$app}.{$ ctl}。 {$ act}。{$ params}.html

tまたはよりエレガントなディレクトリアクセス方法format は、urlencode の後のパラメータ リストです sp_uid=1&d=1.2&p=sb を渡す場合は、 $params = sp_uid%3D1%26d%3D1.2%26p%3Ds %2Fb

または sp_uid/1/d/1.2 /p/sb

このモードは、?& 特殊文字を URL に含めることができない一部のシナリオで使用できます

1. qq oauth2 検証を通じてログインするには、書き換えルールを設定する必要があります

rwrite .thirdlogin.index.qcallback.sp_uid%3d1.php

ペイバック I REWRITE.PAY.WEIXIN.NATIVE2_NOTIFY.PHP

4.

実装コードの一部 现 现 现

1

2

3 4

5

6

7

8

9

10

11

12

13

$a = (! 空 ( $_REQUEST [ '_a' ]) && is_string ( $_REQUEST [ '_a' ])) ? $_REQUEST [ '_a' ] : 'web' ; preg_match( '/^[w.]+ $/ ' , $a )) {

exit ( '無効な _app 名! ' .htmlspecialchars( $a ))

} }
$GLOBALS [ '_UCT' ][ 'APP' ] = ! ? strto lower ( $a ) : 'ウェブ' ; ] : 'index.index' ;

if (!preg_match( '/^[w.]+$/' , $u )) {

exit ( 'invalid _url name! ' . htmlspecialchars( $u ));

}

$u = 爆発 ( '.' , $u , 2); 

$GLOBALS [ '_UCT' ][ 'CTL' ] = !空 ( $u [ '0' ]) ?  strto lower ( $u [ '0' ]) : 'インデックス' ;

$GLOBALS [ '_UCT' ][ 'ACT' ] = !空 ( $u [ '1' ]) ?  strto lower ( $u [ '1' ]) : 'インデックス' ;

イージーモード

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

//イージーモードでテンプレート tpl に直接アクセス

if (! empty ( $_REQUEST [ '_easy' ]) && is_string ( $_REQUEST [ '_easy' ])) {

$easy =explode ( '.' , $_REQUEST [ '_easy' ]); switch ( count ( $easy )) {

if (preg_match( '/^[w.]+$/' , $easy [1])) {

$ _GET [ '_a' ] = $_REQUEST [ ' _a' ] = $easy

u' ] = $_REQUEST [ '_u' ] = $easy [1] '.'

ケース 2:

_GET [ ' _u' ] = $_REQUEST [ '_u' ] = $easy [1]

ケース 1:

;

$_GET [ '_a' ] = $_REQUEST [ '_a' ] = $easy [0];

休憩 ;

デフォルト :

exit ( 'invalid _easy param! ' . htmlspecialchars( $_REQUEST [ '_easy' ]));

}

}

書き換えモード

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

// URL 書き換えモード

if (! empty ( $_REQUEST [ '_rewrite' ]) && is_string ( $_REQUEST [書きます' ])) {

UEST [ '_rewrite ' ] = urldecode( substr ( $_SERVER [ 'QUERY_STRING' ], '_ rewrite=' ))))

_REQUEST [ '_rewrite' ], 0, strrpos ( $_REQUEST [ '_rewrite' ], '.' ));

//3. 区切り文字として / をサポートします

strlen ( $rewrite ); {

sp = $ [ $i ] を書き換えます

}

}

$rewrite = 爆発 ( $sp , $rewrite , 4);

//最終段は必充填後缀名

switch ( count ( $rewrite )) {

case 3:

case 4: {

$_GET [ '_a' ] = $_REQUEST [ '_a' ] = $rewrite [0];

$_GET [ '_u' ] = $_REQUEST [ '_u' ] = $rewrite [1]。 「。」 。 $rewrite [2];

if (! empty ( $rewrite [3])) {

if ( strpos ( $rewrite [3], '/' )) {

$params = 爆発 ( '/' , $rewrite [3]) ;

for ( $i =0; $i +1< count ( $params ); $i +=2) {

$_REQUEST [urldecode( $params [ $i ])] = urldecode( $params [ $i +1]);

}

}

その他 {

foreach (explode ( '&' , $rewrite [3]) as $p ) {

list( $k , $v ) = explode ( '=' , $p , 2);  

$_REQUEST [urldecode( $k )] = urldecode( $v );

}

}

}

休憩 ;

}

ケース 2:

$_GET [ '_a' ] = $_REQUEST [ '_a' ] = $rewrite [0];

$_GET [ '_u' ] = $_REQUEST [ '_u' ] = $rewrite [1];

休憩 ;

ケース 1:

$_GET [ '_a' ] = $_REQUEST [ '_a' ] = $rewrite [0];

休憩 ;

デフォルト:

ブレーク ;

}

}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。