このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
apricot:usage:ja:config [2020/07/29 14:47] tanaka [配置] |
apricot:usage:ja:config [2020/09/03 13:44] (現在) y2sunlight [Apricot 配置と構成] |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | > 編集中 | ||
| - | |||
| - | ---- | ||
| - | |||
| ====== Apricot 配置と構成 ====== | ====== Apricot 配置と構成 ====== | ||
| --- // | --- // | ||
| - | [[apricot: | + | [[apricot: |
| 目次 | 目次 | ||
| + | * [[apricot: | ||
| * Apricot 配置と構成 | * Apricot 配置と構成 | ||
| + | * [[apricot: | ||
| * [[apricot: | * [[apricot: | ||
| * [[apricot: | * [[apricot: | ||
| - | * [[apricot: | + | * [[apricot: |
| + | * [[apricot: | ||
| * [[apricot: | * [[apricot: | ||
| * [[apricot: | * [[apricot: | ||
| - | * [[apricot: | + | * [[apricot: |
| + | * [[apricot: | ||
| + | * [[apricot: | ||
| * [[apricot: | * [[apricot: | ||
| ---- | ---- | ||
| - | ===== 配置 | + | ===== ディレクトリー構成 |
| - | 以下にプロジェクトフォルダの構成を示します。 | + | 以下にプロジェクトディレクトリーの構成を示します。 |
| {{fa> | {{fa> | ||
| < | < | ||
| - | your-project [プロジェクト] | + | your-project [プロジェクトディレクトリー] |
| | | | | ||
| - | | + | |
| - | | | | + | |
| - | | ├── | + | |
| - | | ├── Exceptions [例外] | + | |
| - | | + | |
| - | | ├── | + | |
| - | | ├── | + | |
| - | | └── | + | </ |
| - | | | + | |
| - | ├── | + | === app ディレクトリー=== |
| - | | | | + | アプリケーションの本体を配置するディレクトリーで以下サブディレクトリーがあります。 |
| - | | ├── lang [言語別の出力テキスト] | + | |
| - | | ├── | + | * '' |
| - | | └── | + | * '' |
| - | | | + | * '' |
| - | ├── | + | * '' |
| - | | | | + | * '' |
| - | | ├── | + | * '' |
| - | | └── | + | * '' |
| + | |||
| + | === assets | ||
| + | アプリケーションのリソースを配置し以下サブディレクトリーがあります。 | ||
| + | |||
| + | | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | === config | ||
| + | アプリケーションの設定を配置し以下サブディレクトリーがあります。 | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | === core ディレクトリー === | ||
| + | Apricotのコアクラスを配置します。コアクラスはApricotフレームワークライブラリとして提供され、次の3つの主要な目的があります。 | ||
| + | |||
| + | * アプリケーションの構成管理を提供します。 | ||
| + | * ロギング、例外集約、デバックの機能を提供します。 | ||
| + | * リクエストからレスポンスまでのアプリケーションの標準的な処理方法を提供します。 | ||
| + | |||
| + | === public ディレクトリー === | ||
| + | 公開用のディレクトリーです。ここにApricotのフロントコントローラ( '' | ||
| + | |||
| + | === var ディレクトリー === | ||
| + | アプリケーションの次のデータを保存するディレクトリーで以下サブディレクトリーがあります。 | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | === vendor ディレクトリー === | ||
| + | Composerが使用する外部ライブラリーの保存ディレクトリーです。 | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== publicディレクトリー ===== | ||
| + | |||
| + | '' | ||
| + | |||
| + | < | ||
| + | your-project [プロジェクトディレクトリー] | ||
| | | | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| | | ||
| | | ||
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | | + | |
| - | | + | </ |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | └── | + | |
| + | Apricot自身のフロントエンドアセットは css, img と js ディレクトリーに配置し、外部ライブラリーのアセットは var または resources ディレクトリーに配置します。実行時にアセットを作成する場合は var に、配布ファイルとしてアセットを含める場合は、resources を使用します。 | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ==== .htcccess ==== | ||
| + | |||
| + | Apricotに含まれている '' | ||
| + | |||
| + | {{fa> | ||
| + | <code - .htaccess> | ||
| + | < | ||
| + | RewriteEngine On | ||
| + | RewriteCond %{REQUEST_FILENAME} !-f | ||
| + | RewriteCond %{REQUEST_FILENAME} !-d | ||
| + | RewriteRule ^ index.php [L] | ||
| + | </ | ||
| </ | </ | ||
| - | === appフォルダ=== | + | この設定では、ApacheのRewriteEngineを有効にして、publicフォルダ下に実在しないファイル及びフォルダに対する全てのリクエストをindex.phpに転送します。詳しくはApacheの[[https:// |
| - | アプリケーションの本体を保存するフォルダーで以下のクラスが存在します。 | + | |
| - | * 【 基盤 】コントローラ、モデル、エラーバッグなどのベースクラス | + | \\ |
| - | * 【 例外 】アプリケーション例外クラスと集約例外コントローラ | + | |
| - | * 【 モデル 】通常データベースのテーブル単位で作り、アプリケーションのデータモデルとなる | + | |
| - | * 【 コントローラ 】通常画面単位に作り、URLと結びついたアクション(メソッド)から構成されている | + | |
| - | * 【 ミドルウェア 】アクション起動時の前処理(まはた後処理)を行うクラス | + | |
| - | * 【 ヘルパー 】ビューヘルパーなどの共通のユーティリティクラス | + | |
| - | === assetsフォルダ | + | ===== アプリケーションの配置 ===== |
| - | アプリケーションのリソースを保存します。 | + | |
| - | *【 ビューテンプレート 】画面を作成するHTMLテンプレート([[basic-library: | + | フロントコントローラ '' |
| - | *【 言語別のテキスト 】トランスレーションの為の言語別のテキスト | + | |
| - | *【 SQLファイル 】データベース構築の為のSQL | + | |
| - | === configフォルダ === | + | {{fa> |
| - | アプリケーションの設定を保存します。 | + | <code php index.php> |
| + | <?php | ||
| + | // | ||
| + | // Autoloader registration | ||
| + | // | ||
| + | require dirname(__DIR__).'/ | ||
| - | *【 起動設定 】機能別のアプリケーション起動時の設定ファイル | + | // |
| - | *【 一般設定 】機能別の一般設定ファイル | + | // Sets the project and pulic path |
| + | // | ||
| + | $project_path = dirname(__DIR__); | ||
| + | $public_path = __DIR__; | ||
| - | === coreフォルダ === | + | // |
| - | Apricotのコアクラスを保存します。コアの主な目的は次の3つです。 | + | // Initializes the application |
| + | // | ||
| + | $application | ||
| - | * アプリケーションの構成管理を提供する | + | ... |
| - | * リクエストからレスポンスまでの標準的な処理方法を提供する | + | </ |
| - | * ロギング、例外集約、デバックの機能を提供する | + | |
| - | === publicフォルダ === | + | このように、デフォルトのindex.php |
| - | 公開用のフォルダです。ここのはApricotのフロントコントローラ( '' | + | |
| - | === varフォルダ === | + | < |
| - | アプリケーションの次のデータを保存するフォルダです。 | + | your-project [プロジェクトディレクトリー] |
| + | | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | | ||
| + | | ||
| + | </ | ||
| - | * ログファイル | + | プロジェクトディレクトリーは公開ディレクトリーからの相対パスで設定することがきでるので、例えば、以下で示すように index.php を変更すれば任意の場所にプロジェクトディレクトリーを配置することができます。 |
| - | * キャッシュファイル | + | |
| - | * データベースファイルなど | + | |
| - | === vendorフォルダ | + | |
| - | Composerが使用する外部ライブラリーの保存フォルダです。 | + | === 兄弟関係(siblings) === |
| + | |||
| + | < | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | | ||
| + | | ||
| + | | | ||
| + | </ | ||
| + | |||
| + | <code php index.php> | ||
| + | $project_path = dirname(__DIR__).'/ | ||
| + | $public_path = __DIR__; | ||
| + | </ | ||
| + | |||
| + | === 祖父母孫関係(Grandparent-Grandchild) | ||
| + | |||
| + | < | ||
| + | your-project [プロジェクトディレクトリー] | ||
| + | | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | <code php index.php> | ||
| + | $project_path = dirname(dirname(__DIR__)); | ||
| + | $public_path = __DIR__; | ||
| + | </ | ||
| \\ | \\ | ||
| ===== 環境設定 ===== | ===== 環境設定 ===== | ||
| + | |||
| + | Apricotでは環境設定ライブラリーとして phpdotenv を使用しています。環境変数を設定する '' | ||
| {{fa> | {{fa> | ||
| 行 139: | 行 235: | ||
| ^環境変数^設定内容^型^必須^ | ^環境変数^設定内容^型^必須^ | ||
| - | |APP_NAME|アプリケーション名(半角英数字)|string|〇| | + | |APP_NAME|アプリケーション名|string|〇| |
| - | |APP_VERSION|バージョン|string|〇| | + | |APP_VERSION|アプリケーションバージョン|string|〇| |
| |APP_SECRET|シークレット文字列\\ 安全の為にランダムな32文字を設定して下さい|string|〇| | |APP_SECRET|シークレット文字列\\ 安全の為にランダムな32文字を設定して下さい|string|〇| | ||
| |APP_DEBUG|デバッグモード|bool|〇| | |APP_DEBUG|デバッグモード|bool|〇| | ||
| |APP_TIMEZON|タイムゾーン|string|〇| | |APP_TIMEZON|タイムゾーン|string|〇| | ||
| + | |APP_LANG|デフォルトの言語(省略時は' | ||
| |LOG_NAME|ログ名 (省略時はAPP_NAMEと同じ)|string| | | |LOG_NAME|ログ名 (省略時はAPP_NAMEと同じ)|string| | | ||
| |LOG_LEVEL|[[https:// | |LOG_LEVEL|[[https:// | ||
| + | |||
| + | 環境変数の取得にはボイラープレートの '' | ||
| + | |||
| + | <code php> | ||
| + | $app_name = env(' | ||
| + | </ | ||
| + | |||
| \\ | \\ | ||
| ===== アプリケーション設定 ===== | ===== アプリケーション設定 ===== | ||
| - | app.php はライブラリとミドルウェアに関する構成とセキュリティーの定義が含まれています。 | + | |
| + | アプリケーションの設定ファイルは、config ディレクトリの下に配置します。 | ||
| + | |||
| + | < | ||
| + | your-project [プロジェクトディレクトリー] | ||
| + | | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | |||
| + | ==== app.phpファイル ===== | ||
| + | |||
| + | アプリケーション変数は ''/ | ||
| + | |||
| + | {{fa> | ||
| + | <code php app.php> | ||
| + | <?php | ||
| + | /** | ||
| + | * This file contains application settings. | ||
| + | */ | ||
| + | return | ||
| + | [ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ]; | ||
| + | </ | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | アプリケーション変数の取得や存在確認を行うには、ボイラープレートを使います。アプリケーション変数は以下のようにドット表記キーによって指定します。 | ||
| + | |||
| + | <code php> | ||
| + | /** Checks if the given key is present. */ | ||
| + | $present = app_has(' | ||
| + | |||
| + | /** Gets the application value specified by the Dot-notation key. */ | ||
| + | $value = app(' | ||
| + | </ | ||
| + | |||
| + | 上例は、以下のように登録されているアプリケーション変数を検索します。 | ||
| + | <code php> | ||
| + | [ | ||
| + | ' | ||
| + | ' | ||
| + | ], | ||
| + | ]; | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ==== routes.phpファイル ==== | ||
| + | |||
| + | Apricotではリクエストルータに [[https:// | ||
| + | routes.php ファイルで行います。以下はその例です: | ||
| + | |||
| + | {{fa> | ||
| + | <code php routes.php> | ||
| + | <?php | ||
| + | // | ||
| + | // Route Definition Callback | ||
| + | // | ||
| + | return function (FastRoute\RouteCollector $r) | ||
| + | { | ||
| + | $base = Core\Application:: | ||
| + | $r-> | ||
| + | { | ||
| + | // Home | ||
| + | $r-> | ||
| + | header(" | ||
| + | }); | ||
| + | |||
| + | // Stub | ||
| + | $r-> | ||
| + | }); | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | ルーティングは、フロントコントローラ '' | ||
| + | |||
| + | 以下は、Apricotのアプリ部分として提供されているroutes.php ファイルの完全なコードです。アプリ部分の初期実装では、ログイン認証コントローラ(AuthControllerクラス)とユーザコントローラ(UserControllerクラス)が含まれています。 | ||
| + | |||
| + | <code php routes.php> | ||
| + | <?php | ||
| + | /** | ||
| + | * This file contains callback for route definitions. | ||
| + | */ | ||
| + | return function (FastRoute\RouteCollector $r) | ||
| + | { | ||
| + | /** @var string $base route base path */ | ||
| + | $base = Apricot\Application:: | ||
| + | |||
| + | // Creates a route group with a common prefix. | ||
| + | $r-> | ||
| + | { | ||
| + | // Authentication | ||
| + | $r->get ('/ | ||
| + | $r-> | ||
| + | $r->get ('/ | ||
| + | |||
| + | // User | ||
| + | $r->get ('/ | ||
| + | $r->get ('/ | ||
| + | $r-> | ||
| + | $r->get ('/ | ||
| + | $r-> | ||
| + | $r-> | ||
| + | |||
| + | // Home | ||
| + | $r->get ('/ | ||
| + | $r-> | ||
| + | header(" | ||
| + | }); | ||
| + | |||
| + | // Stub | ||
| + | $r-> | ||
| + | }); | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | ルーティングのより詳しい説明は「コントローラの[[apricot: | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ==== 設定管理 ==== | ||
| + | |||
| + | アプリケーション内の様々な設定は、ディレクトリー ''/ | ||
| + | |||
| + | < | ||
| + | 設定ファイル名: | ||
| + | </ | ||
| + | |||
| + | 設定値へのアクセスには **ドット表記** による「設定キー」によって行われます。設定キーの第1キーが設定ファイル名の{first_key}と一致します。この第1キーは習慣的にライブラリー名や機能によって名前付けされます。 | ||
| + | |||
| + | 以下に ロギングライブラリである [[https:// | ||
| + | |||
| + | {{fa> | ||
| + | <code php monolog.setting.php> | ||
| + | <?php | ||
| + | return | ||
| + | [ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ]; | ||
| + | </ | ||
| + | |||
| + | settingファイルは key => valute の形式で設定を表す連想配列を返す必要があります。 | ||
| + | |||
| + | settingファイルの設定値を取得するには「ドット表記」によって行います。例えば「ログの名前」を参照する設定キーは、'' | ||
| + | |||
| + | 設定の取得には Configシングルトンを使用します。 | ||
| + | |||
| + | <code php> | ||
| + | /** Checks if the given key is present. */ | ||
| + | $present = Config:: | ||
| + | |||
| + | /** Gets the configuration value specified by the Dot-notation key. */ | ||
| + | $value = Config:: | ||
| + | </ | ||
| + | |||
| + | また、ボイラープレートを使って取得することも出来ます。 | ||
| + | |||
| + | <code php> | ||
| + | $value = config(' | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ==== セットアップ管理 ==== | ||
| + | |||
| + | アプリケーションを構成しているライブラリーやクラスなどのセットアップファイルは、ディレクトリー ''/ | ||
| + | |||
| + | < | ||
| + | セットアップファイル名: | ||
| + | </ | ||
| + | |||
| + | これらのセットアップファイルの構成は、アプリケーション設定ファイル app.php によって行われます。以下に実際の app.php によるセットアップの構成を示します。 | ||
| {{fa> | {{fa> | ||
| 行 166: | 行 459: | ||
| config_dir(' | config_dir(' | ||
| ], | ], | ||
| - | | + | |
| - | \App\Middleware\AccessLog:: | + | |
| - | \App\Middleware\VerifyCsrfToken:: | + | |
| - | // \App\Middleware\Auth\BasicAuth:: | + | |
| - | \App\Middleware\Auth\SessionAuth:: | + | |
| - | ], | + | |
| - | ' | + | |
| - | ' | + | |
| - | ], | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ], | + | |
| - | ], | + | |
| - | ' | + | |
| - | ' | + | |
| - | ], | + | |
| ]; | ]; | ||
| </ | </ | ||
| - | * setup --- ライブラリの初期化ファイルの所在(フルパス) | + | Apricotのアプリケーションインスタンスは、起動時にセットアップ構成で定義されて順序でに従ってsetupファイルを実行します。ここで使用されている '' |
| - | * middleware --- ミドルウェアの完全修飾クラス名 | + | |
| - | * auth --- ユーザ認証(セッション認証)の設定 | + | |
| - | * csrf --- CSRFトークンの設定 | + | |
| \\ | \\ | ||
| - | ===== パッケージ設定 | + | ==== クラスエイリアス |
| - | >TODO | + | |
| - | \\ | + | Apricotは、アプリケーション起動時のセットアップで、クラスのエイリアスを作成します。これは、よく使用する完全修飾クラス名を短くコーディングする為の配慮で、特にHTMLテンプレートでの使用を想定しています。 |
| + | |||
| + | 以下に示すセットアップファイル(aliases.setup.php)を示します。 | ||
| + | |||
| + | {{fa> | ||
| + | <code php aliases.setup.php> | ||
| + | <?php | ||
| + | /** | ||
| + | * Registers the class alias used in the view template | ||
| + | */ | ||
| + | return function(): | ||
| + | { | ||
| + | $aliases = | ||
| + | [ | ||
| + | /* Apricot */ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | |||
| + | /* App */ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ]; | ||
| + | |||
| + | // Creates an alias for a class | ||
| + | foreach($aliases as $alias_name => $original_class) | ||
| + | { | ||
| + | class_alias($original_class, | ||
| + | } | ||
| + | return true; // Must return true on success | ||
| + | }; | ||
| + | </ | ||
| - | ===== ルーティング ===== | + | ここでは、よく使うシングルトンとテンプレート用のヘルパークラスのエイリアスを作っています。 |
| - | >TODO | + | |
| \\ | \\ | ||