このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
apricot:usage:ja:config [2020/08/03 12:06] y2sunlight |
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: | ||
行 22: | 行 23: | ||
===== ディレクトリー構成 ===== | ===== ディレクトリー構成 ===== | ||
- | |||
- | ==== プロジェクトディレクトリー ==== | ||
以下にプロジェクトディレクトリーの構成を示します。 | 以下にプロジェクトディレクトリーの構成を示します。 | ||
行 38: | 行 37: | ||
| | ||
| | ||
- | |||
</ | </ | ||
- | === appフディレクトリー=== | + | === app ディレクトリー=== |
- | アプリケーションの本体を保存するディレクトリーで以下のクラスが存在します。 | + | アプリケーションの本体を配置するディレクトリーで以下サブディレクトリーがあります。 |
- | * [ Foundation ] コントローラ、モデル、エラーバッグなどのベースクラスを配置します。 | + | * '' |
- | * [ Exceptions | + | * '' |
- | * [ Models ] 通常データベースのテーブル単位で作り、アプリケーションのデータモデルを配置します。 | + | * '' |
- | * [ Controllers ] 通常画面単位に作り、URLと結びついたアクション(メソッド)からを配置します。 | + | * '' |
- | * [ Middleware | + | * '' |
- | * [ Helpers ] ビューヘルパーなどの共通のユーティリティクラスを配置します。 | + | * '' |
+ | * '' | ||
- | === assetsディレクトリー === | + | === assets ディレクトリー === |
- | アプリケーションのリソースを配置します。 | + | アプリケーションのリソースを配置し以下サブディレクトリーがあります。 |
- | * [ views ] 画面を作成するHTMLテンプレート([[basic-library: | + | * '' |
- | * [ lang ] トランスレーションの為の言語別のテキスト | + | * '' |
- | * [ sql ] データベース構築の為のSQL | + | * '' |
- | === configディレクトリー === | + | === config ディレクトリー === |
- | アプリケーションの設定を配置します。 | + | アプリケーションの設定を配置し以下サブディレクトリーがあります。 |
- | * [ setup ] 機能別のアプリケーション起動時の設定ファイル | + | * '' |
- | * [ setting ] 機能別の一般設定ファイル | + | * '' |
- | === coreディレクトリー === | + | === core ディレクトリー === |
Apricotのコアクラスを配置します。コアクラスはApricotフレームワークライブラリとして提供され、次の3つの主要な目的があります。 | Apricotのコアクラスを配置します。コアクラスはApricotフレームワークライブラリとして提供され、次の3つの主要な目的があります。 | ||
行 71: | 行 70: | ||
* リクエストからレスポンスまでのアプリケーションの標準的な処理方法を提供します。 | * リクエストからレスポンスまでのアプリケーションの標準的な処理方法を提供します。 | ||
- | === publicディレクトリー === | + | === public ディレクトリー === |
公開用のディレクトリーです。ここにApricotのフロントコントローラ( '' | 公開用のディレクトリーです。ここにApricotのフロントコントローラ( '' | ||
- | === varディレクトリー === | + | === var ディレクトリー === |
- | アプリケーションの次のデータを保存するディレクトリーです。 | + | アプリケーションの次のデータを保存するディレクトリーで以下サブディレクトリーがあります。 |
- | * [ logs ] ログファイル | + | * '' |
- | * [ cache ] キャッシュファイル | + | * '' |
- | * [ db ] データベースファイルなど | + | * '' |
- | === vendorディレクトリー === | + | === vendor ディレクトリー === |
Composerが使用する外部ライブラリーの保存ディレクトリーです。 | Composerが使用する外部ライブラリーの保存ディレクトリーです。 | ||
\\ | \\ | ||
- | ===== public ディレクトリー ===== | + | ===== 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] | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | この設定では、ApacheのRewriteEngineを有効にして、publicフォルダ下に実在しないファイル及びフォルダに対する全てのリクエストをindex.phpに転送します。詳しくはApacheの[[https:// | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== アプリケーションの配置 ===== | ||
+ | |||
+ | フロントコントローラ '' | ||
+ | |||
+ | {{fa> | ||
+ | <code php index.php> | ||
+ | <?php | ||
+ | // | ||
+ | // Autoloader registration | ||
+ | // | ||
+ | require dirname(__DIR__).'/ | ||
+ | |||
+ | // | ||
+ | // Sets the project and pulic path | ||
+ | // | ||
+ | $project_path = dirname(__DIR__); | ||
+ | $public_path = __DIR__; | ||
+ | |||
+ | // | ||
+ | // Initializes the application | ||
+ | // | ||
+ | $application = new Apricot\Application($project_path, | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | このように、デフォルトのindex.php の実装では、公開ディレクトリーとプロジェクトディレクトリーの関係は以下のような親子関係を想定しています。 | ||
+ | |||
+ | < | ||
+ | your-project [プロジェクトディレクトリー] | ||
+ | | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | プロジェクトディレクトリーは公開ディレクトリーからの相対パスで設定することがきでるので、例えば、以下で示すように index.php を変更すれば任意の場所にプロジェクトディレクトリーを配置することができます。 | ||
+ | |||
+ | |||
+ | === 兄弟関係(siblings) === | ||
+ | |||
+ | < | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | | ||
+ | | ||
+ | | | ||
+ | </ | ||
+ | |||
+ | <code php index.php> | ||
+ | $project_path = dirname(__DIR__).'/ | ||
+ | $public_path = __DIR__; | ||
+ | </ | ||
+ | |||
+ | === 祖父母孫関係(Grandparent-Grandchild) === | ||
+ | |||
+ | < | ||
+ | your-project [プロジェクトディレクトリー] | ||
+ | | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | <code php index.php> | ||
+ | $project_path | ||
+ | $public_path | ||
+ | </ | ||
\\ | \\ | ||
===== 環境設定 ===== | ===== 環境設定 ===== | ||
+ | |||
+ | Apricotでは環境設定ライブラリーとして phpdotenv を使用しています。環境変数を設定する '' | ||
{{fa> | {{fa> | ||
行 114: | 行 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> | ||
行 141: | 行 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 | + | |
\\ | \\ | ||