>PHP 프레임워크 >ThinkPHP >여러 응용 프로그램과 여러 구성을 구성하기 위해 thinkphp를 구성하는 방법

여러 응용 프로그램과 여러 구성을 구성하기 위해 thinkphp를 구성하는 방법

尚
앞으로
2020-05-07 09:25:252723검색

여러 응용 프로그램과 여러 구성을 구성하기 위해 thinkphp를 구성하는 방법

다중 모듈

ThinkPHP 3.2.3에서 기본 애플리케이션 디렉터리는 ./Application이고, 아래 기본 모듈은 홈 모듈입니다. 이때 백그라운드 애플리케이션용 관리 모듈을 추가해야 한다면, 기본적으로 ./index.php 항목 파일을 추가합니다:

// 绑定Admin模块到当前入口文件
define('BIND_MODULE','Admin');

이때 http://serverNmae/index.php를 실행하면 ./Application 디렉터리에 관리 모듈이 생성됩니다. 그런데 이때 http://serverName/index.php에 접속하면 실제로는 새로 추가된 Admin 모듈에 접속하게 됩니다. ./Application/Common/Conf/config.php에

//设置默认模块
'DEFAULT_MODULE'    =>  'Home'

를 추가해도 제대로 접속이 되지 않습니다. 홈 모듈을 찾으세요.

사실 매뉴얼에서 언급한 엔트리 파일에 BIND_MODULE을 정의한다는 실제 의미는 기본 모듈을 정의한다는 뜻입니다. 참조: ./ThinkPHP/Library/Think/Dispatcher.calss.php 이 파일은 URL 구문 분석, 라우팅 및 예약을 완료하는 데 사용되는 ThinkPHP의 내장 Dispatcher 클래스를 정의합니다(매뉴얼의 "시스템 프로세스" 섹션 참조). where Line :140

// 获取模块名称
define('MODULE_NAME', defined('BIND_MODULE')? BIND_MODULE : self::getModule($varModule));

정적 메소드 디스패치에서 모듈 이름은 항목 파일에 BIND_MODULE이 정의되어 있는지 먼저 쿼리하여 얻습니다. 정의된 경우 MODULE_NAME의 값은 정의된 BIND_MODULE의 값이 됩니다. 클래스의 정적 메소드가 호출되어 실제 모듈 이름을 가져옵니다.

/**
     * 获得实际的模块名称
     */
    static private function getModule($var) {
        $module   = (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_MODULE'));
        unset($_GET[$var]);
        if($maps = C('URL_MODULE_MAP')) {
            if(isset($maps[strtolower($module)])) {
                // 记录当前别名
                define('MODULE_ALIAS',strtolower($module));
                // 获取实际的模块名
                return   ucfirst($maps[MODULE_ALIAS]);
            }elseif(array_search(strtolower($module),$maps)){
                // 禁止访问原始模块
                return   '';
            }
        }
        return strip_tags(ucfirst(strtolower($module)));
    }

이 메소드에서 URL에 VAR_MODULE 값이 포함되지 않은 경우(기본값은 ./ThinkPHP/Conf/convention에서 m입니다.) .php) 구성 파일에 의해 재정의된 다음 구성 파일에 정의된 DEFAULT_MODULE 값을 찾습니다.

위 분석을 통해 실제로 BIND_MODULE이 기본 모듈을 정의한다는 결론을 내릴 수 있습니다. 프로젝트에 여러 모듈이 있는 경우에는 이렇게 구성하지 마세요.

이때 기본 항목 파일 ./index.php에서 BIND_MODULE을 주석 처리하면(즉, 기본 항목 파일 구성을 사용) http://serverName/admin에 직접 접속하여 Admin 모듈에 접근할 수 있습니다. 이 항목 파일에는 애플리케이션 디렉토리 ./Application이 정의되어 있으므로 http://serverName/admin에 액세스하면 실제로 ./Application/Admin/Controller/IndexController.class.php의 인덱스 메소드에 액세스합니다.

ThinkPHP 3.2.3 이런 식으로 여러 모듈을 구성할 수 있습니다. 항목 파일과 구성 파일에서 이를 정의할 필요가 없습니다. 이는 ThinkPHP에서 공식적으로 권장하는 그룹화 모드이기도 합니다.

또 다른 구성은 다중 항목 설계입니다. 즉, 기본 항목 파일 index.php와 동일한 수준에서 admin.php를 생성하고 index.php에 추가합니다.

// 绑定Home模块到当前入口文件
define('BIND_MODULE','Home');

admin에서 index.php와 동일하게 사용 .php 구성에서는 BIND_MODULE 정의 외에 BIND_MODULE 정의를

// 绑定Admin模块到当前入口文件
define('BIND_MODULE','Admin');

로 변경한 다음 애플리케이션 구성 파일 ./Application/Common/Conf/config.php에

//设置默认模块
'DEFAULT_MODULE'    =>  'Home',

를 추가합니다. http://serverName/index.php는 홈 모듈에 액세스할 수 있고 http://servername/admin.php는 Admin 모듈에 액세스할 수 있지만 index.php는 액세스만 가능하므로 http://serverName/admin에는 액세스할 수 없습니다. 현재 홈 모듈입니다.

다중 애플리케이션

일반적으로 ThinkPHP 3.2.3은 다중 애플리케이션 모드를 사용할 필요가 없습니다. 대부분의 경우 애플리케이션의 확장 요구 사항은 다중 모듈 및 다중 항목 설계를 통해 해결될 수 있기 때문입니다.

Application_API 애플리케이션 생성과 같은 다중 애플리케이션 모드를 사용해야 하는 경우 ./Application과 동일한 수준 디렉터리 아래에 Applicaiton_API 디렉터리를 생성하고 항목 파일 ./api.php를 추가하여 애플리케이션 디렉터리를 가리킬 수 있습니다. ./Application_API:

// 定义应用目录
define('APP_PATH','./Application_API/');

새로 추가된 애플리케이션에는 처음에 홈 모듈이 있어야 합니다.

//设置默认模块
'DEFAULT_MODULE'    =>  'Api',

가 ./Application_API/Common/Conf/config.php에 설정되어 있더라도 처음에는 홈 모듈이 있어야 할 수도 있습니다. 그렇지 않으면 오류가 보고됩니다: 인덱스 컨트롤러를 로드할 수 없습니다.

추천 튜토리얼: "TP5"

위 내용은 여러 응용 프로그램과 여러 구성을 구성하기 위해 thinkphp를 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제