このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
apricot:usage:ja:features [2020/09/10 23:30] y2sunlight |
apricot:usage:ja:features [2020/09/22 08:40] y2sunlight [コントローラ] |
||
---|---|---|---|
行 29: | 行 29: | ||
Apricotでは、フレームワークの主要な部分だけを独自に実装し、他のコンポーネントは、秀作な外部ライブラリーを取り込んで開発されています。テンプレートエンジンにはLaravelと同じBladeを使用している他、環境設定のPhpdotenv、ログ出力のMonolog、そしてエラーハンドラーのwhoopsもLaravelと同じコンポーネントを使用しています。その他でもLaravelと同じ識別子やコーディングスタイルを使用しているので、Laravelユーザには見慣れたコードになっています。 | Apricotでは、フレームワークの主要な部分だけを独自に実装し、他のコンポーネントは、秀作な外部ライブラリーを取り込んで開発されています。テンプレートエンジンにはLaravelと同じBladeを使用している他、環境設定のPhpdotenv、ログ出力のMonolog、そしてエラーハンドラーのwhoopsもLaravelと同じコンポーネントを使用しています。その他でもLaravelと同じ識別子やコーディングスタイルを使用しているので、Laravelユーザには見慣れたコードになっています。 | ||
- | 一般的なWebアプリケーションのフレームワークでは、リクエストルータ、リクエストクラス、レスポンスクラス、ORM、テンプレートエンジン、ミドルウェアやコントローラの基底クラス、DIコンテナ―、ログとエラーハンドラー、そしてそれ以外の様々な機能も持ったライブラリーや部品などから構成されており、Laravelのようなフルスタック・フレームワークでは、これが1つのフレームワークとしてパッケージ化されています。 | + | 一般的なWebアプリケーションのフレームワークでは、リクエストルータ、リクエストクラス、レスポンスクラス、ORM、テンプレートエンジン、ミドルウェアやコントローラの基底クラス、DIコンテナ―、ロガー、エラーハンドラー、そしてそれ以外の様々な機能を持ったライブラリーや部品などから構成されており、Laravelのようなフルスタック・フレームワークでは、これらが1つのフレームワークとしてパッケージ化されています。 |
これらのフルスタック・フレームワークの利用は、中規模以上のアプリケーション開発では、開発効率や保守性に関して大きな効果が期待できますが、比較的小規模なアプリケーション開発では、フレームワークに関連する学習、調査、ファイルの編集、またはフレームワークのルールに従ったカスタマイズに多くの時間を費やされる場合も少なくありません。Apricot はこのような問題を解決するために、フレームワークのコアを出来るだけ軽量にし、カスタマイズ可能な部分をできるだけフレームワークの外側(即ち、アプリケーション部分)に配置するようにしました。 | これらのフルスタック・フレームワークの利用は、中規模以上のアプリケーション開発では、開発効率や保守性に関して大きな効果が期待できますが、比較的小規模なアプリケーション開発では、フレームワークに関連する学習、調査、ファイルの編集、またはフレームワークのルールに従ったカスタマイズに多くの時間を費やされる場合も少なくありません。Apricot はこのような問題を解決するために、フレームワークのコアを出来るだけ軽量にし、カスタマイズ可能な部分をできるだけフレームワークの外側(即ち、アプリケーション部分)に配置するようにしました。 | ||
行 68: | 行 68: | ||
==== Apricot のアプリ(App)部分 ==== | ==== Apricot のアプリ(App)部分 ==== | ||
- | アプリ部分はコアの機能を使って実装されます。アプリ部分の実装は、コントローラとミドルウェアの具象化が主な作業になります。これらの基底クラスは、コア部分に存在します。コントローラは、クライアントからのリクエストを処理してレスポンスを生成する個別のコンポーネントです。ミドルウェアも個別のコンポーネントですが、これはコントローラによって形成されるアプリケーション層からは分離された存在です。両者は共にリクエストを処理して、最終的に何れかのコンポーネントがレスポンスを生成します。 | + | アプリ部分はコアの機能を使って実装されます。アプリ部分の実装は、コントローラとミドルウェアの具象化が主な作業になります。これらの基底クラスは、コア部分に存在します。コントローラは、クライアントからの特定のリクエストを処理してレスポンスを生成するクラスです。ミドルウェアは一般に全てのまたは限定的なリクエストを幅広く処理するクラスで、コントローラによって形成されるアプリケーション層からは分離された存在です。両者は共にリクエストを処理して、最終的に何れかのクラスがレスポンスを生成します。 |
Apricotでは、これらのコンポーネントがリクエストを処理する過程で使用するデータモデルに関連するコンポーネントをアプリ部分に配置します。データモデルの基底クラスはApricot独自で実装されていますが、他のコンポーネントには、以下の外部ライブラリーを使用しています。 | Apricotでは、これらのコンポーネントがリクエストを処理する過程で使用するデータモデルに関連するコンポーネントをアプリ部分に配置します。データモデルの基底クラスはApricot独自で実装されていますが、他のコンポーネントには、以下の外部ライブラリーを使用しています。 | ||
行 88: | 行 88: | ||
===== ボイラープレートとシングルトン ===== | ===== ボイラープレートとシングルトン ===== | ||
- | Apricotでは、コントローラ、ミドルウェアそしてテンプレートの中でフレームワークを呼び出す簡便な方法として、ボイラープレートとシングルトンを使用します。 | + | Apricotでは、コントローラ、ミドルウェアそしてテンプレートの中でフレームワークを呼び出す簡便な方法として、ボイラープレートとシングルトンを提供しています。 |
- | ボイラープレートは良く使うフレームワークのコードパターンを関数として使用できるようにしたヘルパーの集まりです。例えば: | + | ボイラープレートとは良く使うフレームワークのコードパターンを関数として使用できるようにしたヘルパー関数です。例えば: |
<code php> | <code php> | ||
行 116: | 行 116: | ||
===== Apricotの概要 ===== | ===== Apricotの概要 ===== | ||
- | Apricotの概要を知る為に、クライアントがリクエストを行ってからApricotがレスポンスを返すまでを、ユーザ登録アプリケーションを例に説明します。 | + | Apricotの概要を知る為に、クライアントのリクエストを受け取ってからApricotがレスポンスを返すまでを、ユーザ登録アプリケーションを例に説明します。 |
\\ | \\ | ||
行 235: | 行 235: | ||
==== コントローラ ==== | ==== コントローラ ==== | ||
- | ルーティングによって設定されているエンドポイントがアクセスされ、ミドルウェアによってレスポンスが生成されなかった場合、Apricotはコントローラ@アクションをインボークします。コントローラの全ての具象クラスはApricotのアプリ部分の '' | + | ルーティングによって設定されているエンドポイントがアクセスされ、ミドルウェアによってレスポンスが生成されなかった場合、Apricotはコントローラ@アクションをインボークします。コントローラの全ての具象クラスはApricotのアプリ部分の '' |
行 293: | 行 293: | ||
Auto Wiring 機能で使用する引数には、一般的にモデルクラスやサービスクラスを指定します。ここでは、ユーザモデルをコンストラクター引数に指定し、それをメンバ変数に格納しています。 | Auto Wiring 機能で使用する引数には、一般的にモデルクラスやサービスクラスを指定します。ここでは、ユーザモデルをコンストラクター引数に指定し、それをメンバ変数に格納しています。 | ||
- | また、コンストラクタではコントローラのアクションに[[# | + | また、上のコンストラクタではコントローラのアクションに[[# |
\\ | \\ | ||
行 299: | 行 299: | ||
==== HTTP リクエストの取得 ==== | ==== HTTP リクエストの取得 ==== | ||
- | 通常のフレームワークでは、CGIやPHP環境からアプリケーションに到達したすべてのデータ($_SERVER、$_GET、$_POST、$_FILES、$_SESSIONなどの変数)を1つのリクエストクラス(またはインターフェース)にカプセル化します。リクエストクラスでは、これらのデータに加え、フラッシュと呼ばれる、一度だけ保存されるセッション変数(次の画面の遷移のときまで保存される変数)もサポートされています。 | + | 通常のフレームワークでは、CGIやPHP環境からアプリケーションに到達したすべてのデータ($_SERVER、$_GET、$_POST、$_FILES、$_SESSIONなどの変数)を1つのリクエストクラスにカプセル化します。リクエストクラスでは、これらのデータに加え、フラッシュと呼ばれる、一度だけ保存されるセッション変数(次の画面の遷移のときまで保存される変数)もサポートされています。 |
Apricotにはリクエストクラスがありません。その代わりに、個々の変数をカプセル化したクラスのシングルトンを持っています。リクエスト取得用に以下のシングルトンがあります: | Apricotにはリクエストクラスがありません。その代わりに、個々の変数をカプセル化したクラスのシングルトンを持っています。リクエスト取得用に以下のシングルトンがあります: | ||
行 468: | 行 468: | ||
</ | </ | ||
- | ''< | + | ''< |
Apricotは、アクションを呼び出す前にトランザクションを開始し、アクションが例外をスローしなかった場合、トランザクションが成功したものとみなして、そのトランザクションをコミットします。一方、アクションが '' | Apricotは、アクションを呼び出す前にトランザクションを開始し、アクションが例外をスローしなかった場合、トランザクションが成功したものとみなして、そのトランザクションをコミットします。一方、アクションが '' |