ThinkPHP - ルーティング解像度

ビジネスコード:

公共 機能storeEntry()
{ 
    $この - >ディスプレイ( 'store_entry' ); 
}

ます。http://lanse1993.com/store/store_entryリンクをご覧ください

 

[問題]は、ページのレンダリングのコンテンツstore_entry.htmlになりますが、storeEntry方法は、基礎となるソースコードの追跡TP、呼び出されません。

Dispatcher.class.php

/ * * 
     *取得し、実際の操作名
     * / 
    プライベート 静的の 機能 getAction($ VAR$ urlCase = C( 'URL_CASE_INSENSITIVE' ))
    { 
        $アクション =!$ _POST [ $ VAR ])?$ _POST [ $ VAR ] :(!$ _GET [ $ VAR?])$ _GET [ $ VAR ]:C( 'のdefault_action' ));
         解除$ _POST [ $ VAR ]、$ _GET [ $ VAR]);
         IF$地図 = C( 'URL_ACTION_MAP' )){
             IFISSET$マップ [ strtolower (コントローラ名)])){
                 $地図 = $マップ [ strtolower (コントローラ名)];
                 IFISSET$マップ [ strtolower$アクション)])){
                     // 現在のエイリアスを記録
                    DEFINE( 'ACTION_ALIAS'、strtolower$アクション));
                     // 実際の操作名を取得します
                    もしIS_ARRAY$がマップ[ACTION_ALIASを])){
                         parse_str$マップ [ACTION_ALIAS] [1]、$ varsの)。
                        $ _GET = array_merge$ _GET$ varsの);
                        返す $マップ [ACTION_ALIAS]を[0 ]; 
                    } {
                         返す $をマップする[ACTION_ALIAS]を。
                    } 
                } ELSEIFarray_searchstrtolower$アクション)、$マップ)){
                     // 禁止访问原始操作
                    の戻り '' ; 
                } 
            } 
        } 
        もし(C( 'ACTION_NAME_STYLE'、NULL、1)== 0 ){
             $アクション = $ urlCasestrtolower$アクション):$アクション
        } {
             $アクション = $ urlCaselcfirst(parse_name(strtolower$アクション)、1)):lcfirst(parse_name($アクション、1 ))。
        } 
        戻り strip_tags$アクション)。
    }

 

Controller.class.php

/ * * 
     *マジック方法操作行わない場合と
     * @access公開
     * @param $文字列メソッド名メソッド
     * @paramアレイ$引数パラメータ
     * @returnミックス
     * / 
    パブリック 関数 __call($方法$引数
    { 
        IF(0 === strcasecmp$は、方法、ACTION_NAME C( 'ACTION_SUFFIX' ))){
             IFmethod_exists$この、 '_empty' )){
                 // 操作が定義され_emptyが呼び出された場合
                、これを$ - > _空($方法、$ argsを)。
            } ELSEIF(file_exists_case($この - >表示- > parseTemplate())){
                 // チェックテンプレートはそのまま出力する場合は、デフォルトのテンプレートが存在する場合
                $この - > ディスプレイ(); 
            } { 
                APP_DEBUG == falseに && send_http_status(404 ) ; 
                E(L( '_ERROR_ACTION_') ':' .. ACTION_NAME); 
            } 
        } { 
            APP_DEBUG == falseに && send_http_status(404 ); 
            E(__CLASS__ .. ':' $方法L( '_ METHOD_NOT_EXIST_' ));
            リターン; 
        } 
    }

 

コンフィギュレーション

「ACTION_NAME_STYLE」=> 0、             // リクエストメソッドがありません1スタイル0を処理しないで配置されたこぶある 
=>「URL_CASE_INSENSITIVE」// trueにデフォルトはfalse、URLは大文字と小文字を区別大文字と小文字を区別しないで言いました

 

分析:分析ルーティングは、すべてstore_entryをstore_entryとStore_entryの解決動作の実際の名前の後にすることを、処理しない(ハンプが入っていない)大文字と小文字は区別されず、当然のことながら、この方法は、コントローラに存在しない、親クラスコントローラオフセットマジックメソッド__call、ので、直接レンダリング出力テンプレートをデフォルトのテンプレートstore_entry.htmlの存在を確認します

 

おすすめ

転載: www.cnblogs.com/lanse1993/p/12518879.html