Copy Source | Copy HTML < IfModule mod_rewrite . c > RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </ IfModule >Copy Source | Copy HTML < IfModule mod_rewrite . c > RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </ IfModule >Copy Source | Copy HTML < IfModule mod_rewrite . c > RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </ IfModule >Copy Source | Copy HTML < IfModule mod_rewrite . c > RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </ IfModule >Copy Source | Copy HTML < IfModule mod_rewrite . c > RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </ IfModule >Copy Source | Copy HTML < IfModule mod_rewrite . c > RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </ IfModule >Copy Source | Copy HTML < IfModule mod_rewrite . c > RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </ IfModule >Copy Source | Copy HTML < IfModule mod_rewrite . c > RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </ IfModule >
Copy Source | Copy HTML < IfModule mod_rewrite . c > RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </ IfModule >
Copy Source | Copy HTML関数リクエスト( $パス 、 $コールバック ){if ( $ path == $ _SERVER [ 'REQUEST_URI' ]) return call_user_func( $ callback );}
Copy Source | Copy HTML
Copy Source | Copy HTML関数 array_filter_callback_no_empty_str( $ value ){return $ value != '' ;}関数リクエスト( $パス 、 $コールバック ){//コールバックに渡す変数をリクエストします$ args = array ();//ユーザーがアクセスしたアドレス(URI)を部分に分割します$ uri = explode( '/' 、 $ _SERVER [ 'REQUEST_URI' ]);//クエリパスで同じことを行います$ path = explode( '/' 、 $ path );//両方の配列の空の部分を削除します$ uri = array_values(array_filter( $ uri 、array_filter_callback_no_empty_str));$ path = array_values(array_filter( $ path 、array_filter_callback_no_empty_str));// URIのパーツ数とパスが異なる場合、終了if (count( $ uri )!= count( $ path ))falseを返します 。//リクエストパスのすべての部分を調べますfor ( $ i = 0 ; $ i <count( $ path ); $ i ++){//パスの指定された部分が変数であるかどうかを確認します//変数パスは中括弧で囲まれ、正規表現をチェックしますif (preg_match( '| ^ \ {(。*)\} $ |' 、 $ path [ $ i ]、 $ match )){//ある場合、この変数を配列に追加します$ args [ $ match [ 1 ]] = $ uri [ $ i ];}他に{//リクエストの一部が変数ではない場合、URIとリクエストを比較します//一致しない場合、終了しますif ( $ uri [ $ i ]!= $ path [ $ i ])falseを返します 。}}//すべてのチェックの後、コールバックを呼び出し、リクエスト変数を含む配列を渡しますreturn call_user_func_array( $ callback 、 $ args );}
Copy Source | Copy HTML関数 Hello( $ who ){print "Hello、$ who" ;}リクエスト( '/ hello / {who}' 、こんにちは);
Copy Source | Copy HTML関数リクエスト( $ method 、 $ path 、 $ callback 、 $ asserts = array ()){//サーバーにアクセスする方法を確認します。//特定のメソッドがリクエストで指定され、使用されたメソッドと一致しない場合、終了しますif ( $ method != '' && strtolower( $ _SERVER [ 'REQUEST_METHOD' ])!= $ method )falseを返します 。<...>//パスの指定された部分が変数であるかどうかを確認しますif (preg_match( '| ^ \ {(。*)\} $ |' 、 $ path [$ i]、 $ match )){//存在する場合は、テストする正規表現があるかどうかを確認し、//そして、もしあれば、URIの対応する部分への準拠をチェックしますif (! isset ( $ asserts [ $ match [ 1 ]]))|| preg_match( $ asserts [ $ match [ 1 ]]、 $ uri [$ i])){//すべてが正しい場合、この変数をその値とともに配列に追加します$ args [ $ match [ 1 ]] = $ uri [$ i];}他に{//値が正規表現と一致しない場合、終了しますfalseを返します 。}}<...>}
Copy Source | Copy HTMLクラスリクエスト{パブリック $メソッド ; //リクエストメソッド(GET、POST、PUTなど)パブリック $パス ; //リクエストパスパブリック $コールバック 。 //コールバックpublic $ asserts = array (); //パス変数をチェックするための正規表現//クラスコンストラクターパブリック関数 __construct( $ method 、 $ path 、 $ callback ){$ this-> method = strtolower( $ method );$ this- > path = $ path ;$ this-> callback = $ callback ;}// re regexを追加して、nameという名前のパス変数をテストしますパブリック関数 assert( $ name 、 $ re ){$ this-> asserts [ $ name ] = $ re ;//クラスの現在のインスタンスを返します//これにより、同様のコードを記述できます。$ reg-> assert( 'id'、 '| ^ \ d + $ |')-> run();$ thisを 返します。}//リクエスト処理関数パブリック関数 run(){<...>}}
Copy Source | Copy HTML$ req = new Request( '/ user / {id}' 、UserProfile);$ req- > assert( '| ^ \ d + $ |' )-> run();
Copy Source | Copy HTML関数リクエスト( $メソッド 、 $パス 、 $コールバック ){新しいリクエストを返す ( $メソッド 、 $パス 、 $コールバック );}
Copy Source | Copy HTMLリクエスト( '/ user / {id}' 、UserProfile)-> assert( '| ^ \ d + $ |' )-> run();
Copy Source | Copy HTMLクラス申請{public $ requests = array ();/// ---//シングルトンを実装します保護された静的 $インスタンス 。プライベート関数 __construct(){}プライベート関数 __clone(){}パブリックスタティック関数 getInstance(){if (!is_object(self :: $ instance )){self :: $ instance = new self;}return self :: $インスタンス ;}public static function init(){self :: getInstance();}/// ---//すべてのリクエストを処理する内部関数プライベート関数 i_run(){foreach ( $ this- >要求as & $ request ){$ done = $ request- > run( $ params );if ( $ done ) trueを返す場合 ;}falseを返します 。}// i_runの外部静的ラッパー関数//美学のためにのみ必要:Application :: run()はApplication :: getInstance()-> run()よりもきれいに見えるpublic static function run(){return Application :: getInstance()-> i_run();}}
Copy Source | Copy HTMLクラスリクエスト{<...>//クラスコンストラクターパブリック関数 __construct( $ method 、 $ path 、 $ callback ){$ this-> method = strtolower( $ method );$ this- > path = $ path ;$ this-> callback = $ callback ;//このリクエストをアプリケーションのキューに追加しますアプリケーション:: getInstance()->リクエスト[] = $ this ;}<...>パブリック関数 run(){<...>//すべてのチェックの後、コールバックを呼び出し、リクエスト変数を含む配列を渡します$ result = call_user_func_array( $ this-> callback、 $ this-> args);//コールバックがブール値を返した場合、それを返しますif (is_bool( $ result ))return $ result ;//それ以外の場合、trueを返します他にtrueを返します 。}}
Copy Source | Copy HTML新しいアプリケーション();リクエスト( '/ user / {id}' 、UserProfile)-> assert( '| ^ \ d + $ |' )-> run();アプリケーション::実行();
Copy Source | Copy HTMLif (!class_exists( 'Application' )){// Applicationクラスがまだ宣言されていない場合、スクリプトは初めて実行されますクラスリクエスト{<...>}関数リクエスト( $メソッド 、 $パス 、 $コールバック ){<...>}クラス申請{<...>}//アプリケーションの初期化、アプリケーション:: init();}他に{//スクリプトは初めて実行されていませんアプリケーション::実行();}
Source: https://habr.com/ru/post/J118237/More articles:DEVCONF 2011-44を超えるレポートが発表され、「早期鳥」の登録は4月に終了はい、求人検索...イブ、ありがとう! YouTubeで収益を上げるTutumbaの春の更新信じられないほどです。 HTC Incredible SのビデオレビューHPとOracleの対立。 継続iPhoneのハッキング:アクティベーション。 2つの方法。AppleがWebデザインに与えた影響拡張現実の敷居について:開発者のために準備すること(3/3)Appleは、Consolidated.dbファイルの公式の位置を公開しましたAll Articles