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 AnwendungenUnterstü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.phpTatsä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