Heim > Backend-Entwicklung > PHP-Tutorial > Das Modul von TP unterstützt Chinesisch

Das Modul von TP unterstützt Chinesisch

巴扎黑
Freigeben: 2016-11-11 09:56:08
Original
1527 Leute haben es durchsucht

Damit die URL Chinesisch unterstützt, z. B. www.xxx.com/Guangzhou/xx, muss das erfasste Guangzhou/xxxx in emptyAction verarbeitet werden. Der Standardmodulname von TP unterstützt jedoch kein Chinesisch. Daher ist es notwendig, die PHP-Kerndatei des TP-Frameworks zu ändern:
App.class.php
Geänderter Code:

Java-Code

/** 
     * 执行应用程序 
     * @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 ;  
    }
Nach dem Login kopieren



Fügen Sie den chinesischen Modulnamen, der unterstützt werden muss, zum Konfigurationsarray config.php CHINESE_MODULE_NAME hinzu.

Dadurch wird die chinesische URL-Analyse unterstützt.


Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage