ファイルエントリの機能と定義



ファイル エントリ定義

6.0 デフォルトのアプリケーション エントリ ファイルは、public/index.php にあります。デフォルトでは、内容は次のとおりです。

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

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

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

特別なカスタマイズ要件がない場合、エントリ ファイルを変更する必要はありません。

エントリ ファイルの場所は、アプリケーションの展開をより安全にするように設計されています。Web アクセス可能な唯一のディレクトリとしてパブリック ディレクトリに従うようにしてください。他のファイルは、Web アクセスできないディレクトリに配置できます。

コンソール エントリ ファイル

アプリケーション エントリ ファイルに加えて、システムはプロジェクトのルート ディレクトリにあるコンソール エントリ ファイルも提供します (これは、ファイルには接尾辞がありません)。

ファイル コードは次のとおりです:

#!/usr/bin/env php
<?php
namespace think;

// 加载基础文件
require __DIR__ . '/vendor/autoload.php';

// 应用初始化
(new App())->console->run();

コンソール エントリ ファイルは、コンソール コマンドを実行するために使用されます。例:

php think version

システムには、一般的に使用されるいくつかの機能が組み込まれています。追加の拡張機能がインストールされると、対応するコンソール コマンドも追加され、すべてこのエントリ ファイルを通じて実行されます。

アプリディレクトリ直下にコントローラー、モデル、ビューなどのクラスライブラリディレクトリがある場合はシングルアプリケーションモード(デフォルトモード)ですが、アプリディレクトリ直下にアプリケーションサブディレクトリを作成すると自動的にシングルアプリケーションモードになります。マルチアプリケーションモードになります。

単一アプリケーションと複数アプリケーションのディレクトリ構造の違いは次のとおりです (主にアプリ ディレクトリ内)。

シングル アプリケーション モード

├─app アプリケーション ディレクトリ

│ §─controller コントローラ ディレクトリ

│ ├─model モデル ディレクトリ

│ § ─ 閲覧 カタログ閲覧

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

# │

## § ─ PUBLIC Web ディレクトリ(外部アクセスディレクトリ)

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

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

Apache

├configアプリケーション構成ディレクトリ

#出力 出力 出力 出力 フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド フィールド

##'

│ │ v─VIEW カタログの表示

# │ │ ├ ─CONFIG 構成カタログ (推奨)

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

│ §─adminバックエンド アプリケーション

│ │ §─controller コントローラディレクトリ

│ │ §─model モデルディレクトリ

│ │ ├─view ビューディレクトリ

│ │ ├─config 設定ディレクトリ (優先)

│ │ └ ─ ... より多くの種類のライブラリ ディレクトリ

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

リライトを使用Apache の

#│

til─config アプリケーション構成ディレクトリ

│ §─index インデックス アプリケーション構成

│ └─admin 管理アプリケーション構成

# │

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

# ─ ─index インデックス アプリケーション ルート定義ディレクトリ

# ─ a └ a └ └ └ ─管理者 admin.

##│

─runtime ランタイム ディレクトリ

│ §─index インデックス アプリケーション ランタイム ディレクトリ

│ └─admin admin アプリケーション ランタイム ディレクトリ

ディレクトリ構造からわかるように、各アプリケーションは比較的独立しており、各アプリケーションには対応するエントリ ファイルがあり、アプリケーションは複数レベルのコントローラを通じてコン​​トローラ グループを維持することもできます。

複数のアプリケーションが異なるエントリを使用する場合、各エントリ ファイルの内容は同じです。デフォルトのエントリ ファイル名 (サフィックスなし) はアプリケーション名です。たとえば、エントリ ファイル名がアプリケーションと一致しない場合は、バックエンド管理アプリケーションの場合、エントリ ファイル名に think.php が使用されている場合、エントリ ファイルを次のように変更する必要があります。

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

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

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

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

#ディレクトリの場所ディレクトリの説明取得方法ルート ディレクトリプロジェクトが配置されているディレクトリはデフォルトで自動的に取得され、エントリ ファイルが 基本ディレクトリ ルート ディレクトリ下の アプリケーション ディレクトリ現在のアプリケーションが存在するディレクトリ (存在する場合)シングルアプリケーションモード 基本ディレクトリと同じ マルチアプリケーションモードの場合は 設定ディレクトリ実行時ディレクトリフレームワーク実行時のディレクトリ、シングルアプリケーションモードの場合はルートディレクトリの##App::getRuntimePath()コア クラス ライブラリ ディレクトリthinkApp::getThinkPath()

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


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

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

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

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

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

は、同じエントリ ファイル内の複数のアプリケーションへのアクセスをサポートし、アプリケーションのマッピングとカスタマイズをサポートします。

config/app.php 設定ファイルで

// 开启自动多应用模式
'auto_multi_app'    =>    true,

を設定するだけでよいため、アプリケーションごとにエントリ ファイルを作成する必要はなく、 Index.php エントリ ファイル。マルチエントリ方式を使用した URL アクセスが次の場合:

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

自動マルチアプリケーション モードをオンにすると、

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

になります。 pathinfo アドレスの最初のパラメータは現在のアプリケーション名を表し、後者はアプリケーションのルーティングを表します。

http://serverName/index.php

に直接アクセスすると、実際にはインデックス アプリケーションにアクセスすることになります (デフォルトはエントリ ファイル名です)。デフォルトのアプリケーションがインデックスではない場合は、デフォルトのアプリケーションは、default_app 構成パラメータを介して指定されます。

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

次に、

http://serverName/index.php

にアクセスしてください。実際、アクセスしているのはホーム アプリケーションです。

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

アプリケーション マッピングは自動マルチアプリケーション モードのみをサポートします


アプリケーション エイリアス マッピングをサポートします。例:

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

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

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

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

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

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

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

アプリケーション アクセスの禁止は、自動マルチアプリケーション モードのみをサポートします

URL 経由でアプリケーションにアクセスしたくない場合たとえば、いくつかのパブリック クラス ライブラリを配置するために共通のサブディレクトリが追加されます。

'deny_app_list' =>    ['common']



## を設定できます。
App クラスをインスタンス化するときに渡すことができます。 App::getRootPath()
app ディレクトリApp::getBasePath()
app/application subdirectoryApp::getAppPath()
configルート ディレクトリ下のディレクトリApp::getConfigPath()
runtimeディレクトリ、マルチアプリケーションモードの場合はruntime/application subdirectory#.
フレームワークコア クラス ライブラリDirectory