시스템 다중 응용 프로그램 모드
다중 애플리케이션
은 기본적으로 단일 애플리케이션 모드로 배포됩니다. 디렉터리 구조는 다음과 같습니다.
├─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를 설정할 수 있습니다.