System-Mehrfachanwendungsmodus


Mehrere Anwendungen

Standardmäßig wird der Einzelanwendungsmodus für die Bereitstellung verwendet. Die Verzeichnisstruktur ist wie folgt:

├─app Anwendungsverzeichnis

│ ├─Controller Controller -Verzeichnis

│ ├ ├ºModel Controller -Verzeichnis Weitere Klassenbibliotheksverzeichnisse

│ C ─ Öffentliches Webverzeichnis (besuchter Katalog)

│ ├ ─ notEx.php-Eingangsdatei

│ ├ ─ Router.php Schnelltestdatei

│ └─.htaccess für Apache-Rewriting

│ 图 ─ Verzeichnis anzeigen

├─CONFIG Anwendungskatalog

├─route Routendefinitionsverzeichnis

├─runtime Anwendungslaufzeitverzeichnis

Der Vorteil des Einzelanwendungsmodus besteht darin, dass er einfach und flexibel ist und die URL-Adresse durch Routing vollständig steuerbar ist. Mit der Routing-Gruppierungsfunktion kann ein flexibler Mechanismus ähnlich mehreren Anwendungen realisiert werden.

Wenn Sie den Multi-App-Modus verwenden möchten, müssen Sie die Multi-App-Modus-Erweiterung think-multi-app installieren.

composer require topthink/think-multi-app

Dann muss Ihre Anwendungsverzeichnisstruktur wie folgt angepasst werden (der Hauptunterschied besteht im App-Verzeichnis).

├─App-Anwendungsverzeichnis

│ ├─index                                                                                                                                                                                                                           型 ─Modell Modellverzeichnis

│ │ ├ ─ View View Directory

│ │ ├ ─Config Konfigurationsverzeichnis (Priorität)

│ │ └─ ...       Weitere Bibliotheksverzeichnisse

│ ├─admin                                                                                 ├─Controller │ Controller-Verzeichnis │ │ ├─Modell │ Modellverzeichnis │ ├─Ansicht │ Verzeichnis anzeigen │ │ ├─config Konfigurationsverzeichnis (Priorität)

│ │ └─ ... Weitere Bibliotheksverzeichnisse

│ ├─öffentliches WEB-Verzeichnis (externes Zugriffsverzeichnis)

│ ├─admin.php Backend-Eintragsdatei

│ ├─index.php Eintragsdatei

│ ├─router.php Schnelltestdatei

│ └─.htaccess für Apache-Rewriting

│ ├─Config Application Configuration Directory Application Configuration Directory. Konfiguration der Admin-Anwendung

│ ├─view             Verzeichnis anzeigen                                                                                                                                                   . Verzeichnis der Admin-Anwendungsansicht

│ ├─route                       Routendefinitionsverzeichnis                                                                                                                                          Routendefinitionsverzeichnis                                      Routing-Definitionsverzeichnis der Admin-Anwendung

│ ├─ Runtime Runtime Directory Laufzeit Laufzeit Laufzeitverzeichnis der Admin-Anwendung

Wie aus der Verzeichnisstruktur ersichtlich ist, bleibt jede Anwendung relativ unabhängig und kann mehrere Eintragsdateien unterstützen. Die Anwendung kann auch Controller-Gruppen über mehrstufige Controller verwalten.

Automatische Bereitstellung mehrerer Anwendungen

Unterstützt den Zugriff auf mehrere Anwendungen in derselben Eintragsdatei sowie die Anwendungszuordnung und -anpassung. Wenn Sie über die Eintragsdatei index.php zugreifen und keinen Anwendungsnamen festlegen, übernimmt das System automatisch den automatischen Multianwendungsmodus.

Die URL-Adresse des automatischen Multianwendungsmodus verwendet standardmäßig

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

. Das heißt, der erste Parameter der Pathinfo-Adresse stellt den aktuellen Anwendungsnamen dar, gefolgt von der Route oder dem Controller der Anwendung/des Betriebs.

Wenn Sie direkt auf

http://serverName/index.php

zugreifen, greifen Sie tatsächlich auf die Index-Standardanwendung zu. Sie können die Standardanwendung über den Konfigurationsparameter default_app in der Konfigurationsdatei app.php angeben.

// 设置默认应用名称
'default_app' => 'home',

Dann besuchen Sie

http://serverName/index.php
Tatsächlich greifen Sie auf die Home-Anwendung zu.

Im automatischen Multianwendungsmodus ist das Routing für jede Anwendung unabhängig, sodass Sie Anwendungsparameter in der URL nicht weglassen können. Es kann jedoch mithilfe der Domänennamenbindung gelöst werden.

Intelligente Mehrfachanwendungserkennung

Wenn kein verbindlicher Eintrag oder Domänenname vorhanden ist, ist die Anwendung in der URL nicht vorhanden. Besuchen Sie beispielsweise:

http://serverName/index.php/think

Vorausgesetzt, dass keine Think-Anwendung vorhanden ist, wechselt das System zu diesem Zeitpunkt automatisch in den Einzelanwendungsmodus. Wenn eine globale Route definiert ist, wird auch die Routenübereinstimmung überprüft.

Wenn wir es in der globalen Route route/route.php definieren:

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

Der Zugriff auf die obige URL führt zur Ausgabe von

hello,ThinkPHP!

Wenn Sie möchten, dass die Think-Anwendung nicht existiert, greifen Sie direkt darauf zu Das Routing der Standardanwendung kann in app.php

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

konfiguriert werden. Zu diesem Zeitpunkt wird auf das Routing unter der Home-Anwendung zugegriffen.

Anwendungseintrag hinzufügen

Ermöglicht die Erstellung separater Eintragsdateien für jede Anwendung, ohne über die index.php-Eintragsdatei auf mehrere Anwendungen zugreifen zu müssen, z. B. das Erstellen einer admin.php Eintragsdatei für den Zugriff auf die Admin-Anwendung.

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

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

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

Wenn mehrere Anwendungen unterschiedliche Einträge verwenden, ist der Inhalt jeder Eintragsdatei derselbe. Der Standardname der Eintragsdatei (ohne Suffix) ist der Anwendungsname.

Verwenden Sie die folgende Methode, um auf die Admin-Anwendung zuzugreifen

http://serverName/admin.php

Wenn der Name Ihrer Eintragsdatei nicht mit der Anwendung übereinstimmt, z. B. in Ihrer Hintergrund-Administratoranwendung, verwendet der Name der Eintragsdatei test.php , dann muss die Eintragsdatei geändert werden in:

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

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

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

Aktuelle Bewerbung abrufen

Wenn Sie den aktuellen Anwendungsnamen benötigen, können Sie das

app('http')->getName();

Anwendungsverzeichnis verwenden, um den

abzurufen Einzelanwendungs- und Mehrfachanwendungsmodi. Dies wirkt sich auf die Werte einiger Systempfade aus. Um den Inhalt dieses Handbuchs besser zu verstehen, müssen Sie möglicherweise die durch die folgenden Systempfade dargestellten Speicherorte verstehen.

目录位置
目录说明
获取方法(助手函数)
根目录项目所在的目录,默认自动获取,可以在入口文件实例化App类的时候传入。root_path()
基础目录
根目录下的app目录base_path()
应用目录当前应用所在的目录,如果是单应用模式则同基础目录,如果是多应用模式,则是app/应用子目录app_path()
配置目录根目录下的config目录config_path()
运行时目录框架运行时的目录,单应用模式就是根目录的runtime目录,多应用模式为runtime/应用子目录runtime_path()

Hinweis: Die Anwendung unterstützt die Verwendung des Composer-Pakets. Zu diesem Zeitpunkt kann es sich bei dem Verzeichnis um das Verzeichnis handeln, in dem sich die Klassenbibliothek des Composer-Pakets befindet.

Wenn Sie bei der nichtautomatischen Bereitstellung mehrerer Anwendungen die Composer-Anwendung laden möchten, müssen Sie den Anwendungspfad in der Eintragsdatei festlegen:

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

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

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

Anwendungszuordnung

Auto-Multiple Im Anwendungsmodus wird die Anwendungsaliaszuordnung unterstützt, zum Beispiel:

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

Nach der Anwendungszuordnung ist der ursprüngliche Anwendungsname nicht mehr zugänglich. Beispielsweise kann nicht direkt auf die Admin-Anwendung oben zugegriffen werden, sondern nur darauf über die think-Anwendung.

Anwendungszuordnung unterstützt Pan-Analyse, zum Beispiel:

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

bedeutet, dass, wenn die Anwendung, auf die über die URL zugegriffen wird, nicht in der aktuell eingestellten Zuordnung ist, sie automatisch der Indexanwendung zugeordnet wird.

Wenn Sie Composer zum Laden von Anwendungen verwenden möchten, müssen Sie

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

Domänennamenbindungsanwendung

Wenn Sie mehrere Anwendungen haben, einrichten -Anwendung verwendet mehrere Subdomänen. Für den unabhängigen Zugriff auf den Domänennamen können Sie die Bindung zwischen dem Domänennamen und der Anwendung in der Konfigurationsdatei config/app.php definieren.

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

Anwendungszugriff verbieten

Wenn Sie beispielsweise nicht möchten, dass auf eine Anwendung über eine URL zugegriffen wird, fügen Sie ein gemeinsames Unterverzeichnis hinzu, um einige zu platzieren In der öffentlichen Klassenbibliothek können Sie

'deny_app_list' =>    ['common']


festlegen