システムマルチアプリケーションモード


マルチアプリケーション

デフォルトのインストール後、展開にはシングル アプリケーション モードが使用されます。ディレクトリ構造は次のとおりです。 ─app アプリケーション ディレクトリ

│ til─controller

クラス ライブラリ カタログ

│ C ─ パブリック Web ディレクトリ (外部アクセス ディレクトリ)

# ─nDex.php 入口ファイル

# ─ ─ Router.php クイック テスト ファイル

# ─.htaccess の書き換えアパッチ

│ 図 ─ ビュー カタログの表示

─ CONFIG アプリケーション構成カタログ

─ ルート ルート定義ディレクトリ

─ 実行時にランタイム アプリケーションが実行される アプリケーション モードの利点は、次のとおりです。シンプルかつ柔軟であり、URL アドレスはルーティングを通じて完全に制御可能です。ルーティンググループ化機能により、複数のアプリケーションと同様の柔軟な仕組みを実現できます。

マルチアプリケーション モードを使用する場合は、マルチアプリケーション モード拡張機能 think-multi-app をインストールする必要があります。

composer require topthink/think-multi-app

次に、アプリケーション ディレクトリ構造を次のように調整する必要があります (主な違いはアプリ ディレクトリにあります)。

#│││。。

#│ │ └─ ... │ その他のクラス ライブラリ ディレクトリ

│ §─public WEBディレクトリ(外部アクセスディレクトリ)

│ §─admin.php │ バックエンドエントリーファイル

│ §─index.php │ エントリーファイル

│ §─router.php │ クイックテストファイル

│ └─ Apache 書き換え用 .htaccess

│ アプリケーション—CONFIG アプリケーション構成ディレクトリ

─ ─ DEDEX INDEX アプリケーション構成

# │ └ ─ ADMIN 管理者 アプリケーション構成

│ §─view ディレクトリの表示ディレクトリの表示表示 。 ├─route。 ├runtime各アプリケーションに使用して、スルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルーを使用して使用して使用しています。複数のエントリファイルをサポートできます。アプリケーションは、マルチレベル コントローラを通じてコン​​トローラ グループを維持することもできます。

自動マルチアプリケーション展開

同じエントリ ファイル内の複数のアプリケーションへのアクセスをサポートし、アプリケーションのマッピングとカスタマイズをサポートします。 Index.php エントリ ファイルを介してアクセスし、アプリケーション名を設定しない場合、システムは自動的に自動マルチアプリケーション モードを採用します。

自動マルチアプリケーション モードの URL アドレスはデフォルトで使用されます

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

つまり、pathinfo アドレスの最初のパラメータは現在のアプリケーション名を表し、その後にルートまたはアプリケーションのコントローラー/操作します。

http://serverName/index.php

に直接アクセスすると、実際にはインデックスのデフォルト アプリケーションにアクセスすることになります。デフォルト アプリケーションは、app.php 構成ファイルのdefault_app 構成パラメータを通じて指定できます。

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

次に、

http://serverName/index.php

にアクセスします。実際には、ホーム アプリケーションにアクセスします。

自動マルチアプリケーション モードでは、ルーティングはアプリケーションごとに独立しているため、URL 内のアプリケーション パラメータを省略することはできません。ただし、ドメイン名バインドを使用すると解決できます。

マルチアプリケーションのインテリジェントな識別

バインディング エントリまたはドメイン名がない場合、URL 内のアプリケーションは存在しません。たとえば、次の場所にアクセスしてください。

http://serverName/index.php/think

think アプリケーションがないと仮定すると、この時点でシステムは自動的にシングル アプリケーション モードに切り替わり、グローバル ルートが定義されている場合はルート マッチングもチェックされます。

route/route.php グローバル ルートで定義すると:

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

上記の URL にアクセスすると

hello,ThinkPHP!

が出力されます。think アプリケーションを存在させたくない場合は、直接アクセスしてください。デフォルトアプリケーションのルーティングはapp.php

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

で設定できます。このとき、ホームアプリケーション配下のルーティングにアクセスします。

アプリケーション エントリの追加

index.php エントリ ファイルを通じて複数のアプリケーションにアクセスすることなく、アプリケーションごとに個別のエントリ ファイルを作成できるようにします (admin.php の作成など)。管理アプリケーションにアクセスするためのエントリ ファイル。

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

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

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

複数のアプリケーションが異なるエントリを使用する場合、各エントリ ファイルの内容は同じです。デフォルトのエントリ ファイル名 (サフィックスなし) はアプリケーション名です。

次のメソッドを使用して管理アプリケーションにアクセスします

http://serverName/admin.php

エントリ ファイル名がアプリケーションと一致しない場合 (たとえば、バックグラウンド管理アプリケーションなど)、エントリ ファイル名には test.php が使用されます。

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

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

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

Get the current application

現在のアプリケーション名を取得する必要がある場合は、次のように変更する必要があります。

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

アプリケーション ディレクトリを取得してください。

単一アプリケーション モードとマルチアプリケーション モードは、一部のシステム パスの値に影響します。このマニュアルの内容を理解するには、次のシステム パスで表される場所を理解する必要がある場合があります。

#ディレクトリの場所ディレクトリの説明#取得メソッド (ヘルパー関数)ルート ディレクトリプロジェクトが配置されているディレクトリはデフォルトで自動的に取得され、エントリ ファイルが App クラスをインスタンス化するときに渡すことができます。 root_path()基本ディレクトリルート ディレクトリ下のアプリ ディレクトリbase_path()アプリケーション ディレクトリ現在のアプリケーションが配置されているディレクトリ。シングル アプリケーション モードの場合は、基本ディレクトリと同じです。マルチ アプリケーション モードの場合は、基本ディレクトリと同じです。アプリケーション モードの場合、これは app/application サブディレクトリですapp_path()設定ディレクトリルート ディレクトリの下の config ディレクトリconfig_path()ランタイム ディレクトリフレームワークがランタイムのときのディレクトリ、シングル アプリケーション モードはルートのランタイム ディレクトリですマルチアプリケーション モードは、ランタイム/アプリケーションのサブディレクトリです。runtime_path( )

注: アプリケーションは、composer パッケージの使用をサポートしています。この時点で、ディレクトリは、composer パッケージのクラス ライブラリが配置されているディレクトリである可能性があります。

非自動マルチアプリケーション展開の場合、コンポーザー アプリケーションをロードする場合は、エントリ ファイルにアプリケーション パスを設定する必要があります:

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

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

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

アプリケーション マッピング

自動マルチアプリケーション モードでは、アプリケーション エイリアス マッピングがサポートされています。例:

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

アプリケーション マッピングの後、元のアプリケーション名にアクセスできなくなります。たとえば、上記の管理アプリケーション直接アクセスすることはできず、think アプリケーションを介してのみアクセスできます。

アプリケーション マッピングは汎分析をサポートします。例:

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

は、URL によってアクセスされるアプリケーションが現在設定されているマッピングにない場合、インデックス アプリケーションに自動的にマッピングされることを意味します。

コンポーザーを使用してアプリケーションをロードする場合は、

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

ドメイン名バインディング アプリケーションをセットアップする必要があります。

マルチ-application は複数のサブドメイン名を使用します。 または、独立したドメイン名にアクセスするには、config/app.php 構成ファイルでドメイン名とアプリケーション間のバインディングを定義できます。

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

アプリケーション アクセスの禁止

たとえば、URL 経由でアプリケーションにアクセスしたくない場合は、共通のサブディレクトリを追加して、 public クラス ライブラリでは、

'deny_app_list' =>    ['common']


を設定できます。