시스템 다중 응용 프로그램 모드


다중 애플리케이션

은 기본적으로 단일 애플리케이션 모드로 배포됩니다. 디렉터리 구조는 다음과 같습니다.

├─app 애플리케이션 디렉터리

│ ├─컨트롤러 디렉터리

│ ├─모델 모델 카탈로그

│ ├ ─보기             디렉터리 보기

│ └─...                                                                                                                                                                                                             당신에게

├─public            WEB 디렉터리(외부 액세스 디렉터리)

│ ├─index.php         항목 파일

│ ├─router.php           빠른 테스트 파일

│ └─.htaccess                               Apache용 재작성

│ |                            디렉터리 보기                                        애플리케이션의 런타임 디렉터리

단일 애플리케이션 모드의 장점은 간단하고 유연하며 라우팅을 통해 URL 주소를 완전히 제어할 수 있다는 것입니다. 라우팅 그룹화 기능을 사용하면 여러 애플리케이션과 유사한 유연한 메커니즘을 실현할 수 있습니다.

멀티 앱 모드를 사용하려면 멀티 앱 모드 확장 Think-multi-app을 설치해야 합니다.

composer require topthink/think-multi-app

그런 다음 애플리케이션 디렉토리 구조를 다음과 같이 조정해야 합니다(주요 차이점은 앱 디렉토리에 있습니다).

├─앱 응용 프로그램 디렉터리

│ ├─index                                          .

│ │ ├─view │ 디렉터리 보기

│ │ ├─config 구성 디렉터리(pri ority)

│ │ └─ ... 더 많은 라이브러리 디렉토리

│ ├─admin 백엔드 애플리케이션

│ │ ├─controller 컨트롤러 디렉터리

│ │ ├─model │ 모델 카탈로그

│ │ ├─view           디렉터리 보기

│ │ ├─config        구성 디렉터리(우선순위)

│ │ └─ ...         더 많은 수업 라이브러리 디렉토리

│ ├─public                WEB 디렉터리(외부 액세스 디렉터리)

│ ├─admin.php 백엔드 항목 파일

│ ├─index.php 항목 파일

│ ├─router.php 빠른 테스트 파일

│ └─.htaccess        Apache용으로 다시 작성

│ 应용—CONFIG 애플리케이션 구성 카탈로그

─ dDex 인덱스 애플리케이션 구성

─ admin admin 애플리케이션 구성

│ ├─보기                                                                                                            >                                           ​ · ─ 경로 경로 정의 디렉터리

─ ├ ─index index 응용 프로그램 경로 정의 디렉터리

─ admin admin 응용 프로그램 경로 정의 디렉터리

│ ├─런타임                                                                                                                     런타임              다중 입구 지원 가능 파일, 애플리케이션은 다중 레벨 컨트롤러를 통해 컨트롤러 그룹화를 유지할 수도 있습니다.

자동 다중 애플리케이션 배포

동일한 항목 파일에서 여러 애플리케이션에 대한 액세스를 지원하고 애플리케이션 매핑 및 사용자 정의를 지원합니다. index.php 항목 파일을 통해 접속하고 애플리케이션 이름을 설정하지 않으면 시스템이 자동으로 자동 다중 애플리케이션 모드를 채택합니다.

자동 다중 애플리케이션 모드의 URL 주소는 기본적으로

// 访问admin应用
http://serverName/index.php/admin
// 访问shop应用
http://serverName/index.php/shop

를 사용합니다. 즉, pathinfo 주소의 첫 번째 매개변수는 현재 애플리케이션 이름을 나타내고 그 뒤에 애플리케이션의 경로 또는 컨트롤러/작업이 옵니다.

http://serverName/index.php

에 직접 액세스하면 실제로는 index 기본 애플리케이션에 액세스하는 것입니다. app.php 구성 파일의 default_app 구성 매개변수를 통해 기본 애플리케이션을 지정할 수 있습니다.

// 设置默认应用名称
'default_app' => 'home',
그런 다음

http://serverName/index.php

를 방문하세요. 사실 귀하가 액세스하고 있는 것은 홈 애플리케이션입니다.

자동 다중 애플리케이션 모드에서는 라우팅이 각 애플리케이션마다 독립적이므로 URL에서 애플리케이션 매개변수를 생략할 수 없습니다. 하지만 도메인 이름 바인딩을 사용하면 이 문제를 해결할 수 있습니다.

다중 애플리케이션 지능형 식별

구속 항목이나 도메인 이름이 없으면 URL의 애플리케이션이 존재하지 않는 것입니다. 예를 들어 액세스:

http://serverName/index.php/think

생각 애플리케이션이 존재하지 않는다고 가정하면 시스템은 이때 자동으로 단일 애플리케이션으로 전환됩니다. 애플리케이션 모드에서 전역 경로가 정의되어 있으면 경로 일치 확인도 수행됩니다.

route/route.php 전역 경로에 정의하면:

Route::get('think', function () {
    return 'hello,ThinkPHP!';
});

위 URL에 접근하면

hello,ThinkPHP!
가 출력됩니다.

// 开启应用快速访问
'app_express'    =>    true,
// 默认应用
'default_app'    =>    'home',

think 애플리케이션이 존재하지 않을 때 기본 애플리케이션의 경로에 직접 접근하고 싶다면, 직접 할 수 있습니다 app.php에서 기본 애플리케이션의 경로에 액세스합니다.

// [ 应用入口文件 ]
namespace think;

require __DIR__ . '/../vendor/autoload.php';

// 执行HTTP应用并响应
$http = (new  App())->http;
$response = $http->run();
$response->send();
$http->end($response);

구성. 이때 홈 애플리케이션 아래의 라우팅에 액세스하게 됩니다.

애플리케이션 항목 추가

index.php 항목 파일을 통해 여러 애플리케이션에 액세스하지 않고도 각 애플리케이션에 대해 별도의 항목 파일을 생성할 수 있습니다. 예를 들어 관리자 애플리케이션에 액세스하기 위해 admin.php 항목 파일을 생성합니다.

http://serverName/admin.php

여러 애플리케이션이 서로 다른 항목을 사용하는 경우 각 항목 파일의 내용은 접미사 없이 기본 항목 파일 이름이 동일합니다.

관리 애플리케이션에 액세스하려면 다음 방법을 사용하세요.

// [ 应用入口文件 ]
namespace think;

require __DIR__ . '/../vendor/autoload.php';

// 执行HTTP应用并响应
$http = (new  App())->http;
$response = $http->name('admin')->run();
$response->send();
$http->end($response);

입력 파일 이름이 애플리케이션과 일치하지 않는 경우(예: 백그라운드 관리 애플리케이션에서 항목 파일 이름이 test.php를 사용하는 경우) 항목 파일은 다음과 같아야 합니다. 변경됨:

app('http')->getName();
현재 응용 프로그램 가져오기

현재 응용 프로그램 이름을 가져와야 하는 경우

// [ 应用入口文件 ]
namespace think;

require __DIR__ . '/../vendor/autoload.php';

// 执行HTTP应用并响应
$http = (new  App())->http;
$response = $http->path('path/to/app')->run();
$response->send();
$http->end($response);
응용 프로그램 디렉터리를 사용하여 가져올 수 있습니다.

단일 응용 프로그램 및 다중 응용 프로그램 모드는 일부 시스템 경로의 값에 영향을 미칩니다. 본 매뉴얼의 내용을 더 잘 이해하려면 다음 시스템 경로가 나타내는 위치를 이해해야 할 수도 있습니다. 🎜
디렉터리 위치
디렉터리 설명
Getting 메서드(도우미 기능)
루트 디렉터리프로젝트가 위치한 디렉터리는 기본적으로 자동으로 얻어지며 항목 파일이 인스턴스화될 때 전달할 수 있습니다. 앱 클래스. root_path()
base 디렉터리
root 디렉터리 아래의 app 디렉터리base_path()
application 디렉터리현재 애플리케이션이 위치한 디렉터리입니다. 다중 애플리케이션 모드인 경우 app/application 하위 디렉터리app_path()
config 디렉터리루트 디렉터리 아래의 config 디렉터리config_path()
런타임 디렉터리프레임워크 런타임 디렉터리, 단일 애플리케이션 모드는 루트 디렉터리의 런타임 디렉터리, 다중 애플리케이션 모드는 런타임/애플리케이션 하위 디렉터리runtime_path()

참고: 이 애플리케이션은 현재 작곡가 패키지의 사용을 지원하며, 해당 디렉터리는 작곡가 패키지의 클래스 라이브러리가 위치한 디렉터리일 수 있습니다.

비자동 다중 애플리케이션 배포의 경우 작성기 애플리케이션을 로드하려면 항목 파일에서 애플리케이션 경로를 설정해야 합니다.

'app_map' => [
    'think'  =>  'admin',  // 把admin应用映射为think
],

애플리케이션 매핑

자동 다중 애플리케이션 모드에서는 애플리케이션 별칭 예를 들어 매핑이 지원됩니다.

'app_map' => [
    'think' =>  'admin',  
    'home'  =>  'index',  
    '*'     =>  'index',  
],

애플리케이션 매핑 후에는 원래 애플리케이션 이름에 액세스할 수 없습니다. 예를 들어 위의 관리자 애플리케이션은 직접 액세스할 수 없으며 think 애플리케이션을 통해서만 액세스할 수 있습니다.

애플리케이션 매핑은 범 분석을 지원합니다. 예:

'app_map'    =>    [
    'think' => function($app) {
        $app->path('path/to/composer/app');
    },
],

는 URL로 액세스한 애플리케이션이 현재 설정된 매핑에 없으면 자동으로 인덱스 애플리케이션에 매핑된다는 의미입니다.

작곡기를 사용하여 애플리케이션을 로드하려면

'domain_bind' => [
    'blog'        =>  'blog',  //  blog子域名绑定到blog应用
    'shop.tp.com' =>  'shop',  //  完整域名绑定
    '*'           =>  'home', // 二级泛域名绑定到home应用
],

도메인 이름 바인딩 애플리케이션을 설정해야 합니다.

다중 애플리케이션이 액세스를 위해 여러 하위 도메인 또는 독립 도메인 이름을 사용하는 경우 도메인을 정의할 수 있습니다. config/app.php 구성 파일 및 애플리케이션 바인딩의 이름입니다.

'deny_app_list' =>    ['common']

애플리케이션 액세스 금지

URL을 통해 애플리케이션에 액세스하는 것을 원하지 않는 경우, 예를 들어 일부 공개 클래스 라이브러리를 배치하기 위해 공통 하위 디렉터리를 추가한 경우

rrreee


를 설정할 수 있습니다.