ホームページ  >  記事  >  バックエンド開発  >  TPのモジュールは中国語をサポートします

TPのモジュールは中国語をサポートします

巴扎黑
巴扎黑オリジナル
2016-11-11 09:56:081480ブラウズ

www.xxx.com/Guangzhou/xx などの URL が中国語をサポートするには、キャプチャされた Guangzhou/xxxx が emptyAction で処理される必要があります。ただし、TP のデフォルトのモジュール名は中国語をサポートしていません。したがって、TP フレームワークの PHP コア ファイルを変更する必要があります:
App.class.php
変更されたコード:

Java コード

/** 
     * 执行应用程序 
     * @access public 
     * @return void 
     */  
    static public function exec() {  
        if(!preg_match('/^[A-Za-z](\w)*$/',MODULE_NAME) ){ // 安全检测  
            $module  =  false;  
        }else{  
              
            //创建Action控制器实例  
            $group   =  defined('GROUP_NAME') && C('APP_GROUP_MODE')==0 ? GROUP_NAME.'/' : '';  
            //$module  =  A($group.MODULE_NAME);  
  
              
            if(preg_match("/[\x7f-\xff]/", MODULE_NAME)){//中文模式  
                if(in_array(MODULE_NAME,C('CHINESE_MODULE_NAME'))){ //在指定的中文內  
                    $module  =  A($group.'isTheEmpty');  
                }else{  
                    _404(L('_MODULE_NOT_EXIST_').':'.MODULE_NAME);  
                }  
            }else{  
                $module  =  A($group.MODULE_NAME);  
            }  
        }  
  
        if(!$module) {  
              
            if('4e5e5d7364f443e28fbf0d3ae744a59a' == MODULE_NAME) {  
                header("Content-type:image/png");  
                exit(base64_decode(App::logo()));  
            }  
            if(function_exists('__hack_module')) {  
                // hack 方式定义扩展模块 返回Action对象  
                $module = __hack_module();  
                if(!is_object($module)) {  
                    // 不再继续执行 直接返回  
                    return ;  
                }  
            }else{  
                // 是否定义Empty模块  
                $module = A($group.'Empty');  
                if(!$module){  
                    _404(L('_MODULE_NOT_EXIST_').':'.MODULE_NAME);  
                }  
            }  
        }  
        // 获取当前操作名 支持动态路由  
        $action = C('ACTION_NAME')?C('ACTION_NAME'):ACTION_NAME;  
        $action .=  C('ACTION_SUFFIX');  
        try{  
            if(!preg_match('/^[A-Za-z](\w)*$/',$action)){  
                // 非法操作  
                throw new ReflectionException();  
            }  
            //执行当前操作  
            $method =   new ReflectionMethod($module, $action);  
            if($method->isPublic()) {  
                $class  =   new ReflectionClass($module);  
                // 前置操作  
                if($class->hasMethod('_before_'.$action)) {  
                    $before =   $class->getMethod('_before_'.$action);  
                    if($before->isPublic()) {  
                        $before->invoke($module);  
                    }  
                }  
                // URL参数绑定检测  
                if(C('URL_PARAMS_BIND') && $method->getNumberOfParameters()>0){  
                    switch($_SERVER['REQUEST_METHOD']) {  
                        case 'POST':  
                            $vars    =  array_merge($_GET,$_POST);  
                            break;  
                        case 'PUT':  
                            parse_str(file_get_contents('php://input'), $vars);  
                            break;  
                        default:  
                            $vars  =  $_GET;  
                    }  
                    $params =  $method->getParameters();  
                    foreach ($params as $param){  
                        $name = $param->getName();  
                        if(isset($vars[$name])) {  
                            $args[] =  $vars[$name];  
                        }elseif($param->isDefaultValueAvailable()){  
                            $args[] = $param->getDefaultValue();  
                        }else{  
                            throw_exception(L('_PARAM_ERROR_').':'.$name);  
                        }  
                    }  
                    $method->invokeArgs($module,$args);  
                }else{  
                    $method->invoke($module);  
                }  
                // 后置操作  
                if($class->hasMethod('_after_'.$action)) {  
                    $after =   $class->getMethod('_after_'.$action);  
                    if($after->isPublic()) {  
                        $after->invoke($module);  
                    }  
                }  
            }else{  
                // 操作方法不是Public 抛出异常  
                throw new ReflectionException();  
            }  
        } catch (ReflectionException $e) {   
            // 方法调用发生异常后 引导到__call方法处理  
            $method = new ReflectionMethod($module,'__call');  
            $method->invokeArgs($module,array($action,''));  
        }  
        return ;  
    }



サポートする必要がある中国語モジュール名を config.php に追加します。 CHINESE_MODULE_NAME 構成配列

これは中国語の URL 解析をサポートします。


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