Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


apricot:usage:ja:features

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
apricot:usage:ja:features [2020/09/17 15:36]
y2sunlight [特徴]
apricot:usage:ja:features [2020/09/22 16:37] (現在)
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のアプリ部分の ''App\Foundation\Controller'' を継承し、このControllersクラスは、コア部分の ''Apricot\Foundation\BaseController'' を継承しています。コントローラはプロジェクトディレクトリー下の ''App/Controllers'' に配置する必要があります( 名前空間は''\app\Controllers'' です )。+ルーティングによって設定されているエンドポイントがアクセスされ、ミドルウェアによってレスポンスが生成されなかった場合、Apricotはコントローラ@アクションをインボークします。コントローラの全ての具象クラスはApricotのアプリ部分の ''App\Foundation\Controller'' を継承し、このControllersクラスは、コア部分の ''Apricot\Foundation\BaseController'' を継承しています。コントローラはプロジェクトディレクトリー下の ''app/Controllers'' に配置する必要があります( 名前空間は''\App\Controllers'' です )。
  
  
行 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:
 </code> </code>
  
-''<nowiki>$this->transactional()</nowiki>'' はアクショントランザクションを適用するコントローラクラスのメソッドです。上の例では insert、update そして deleteアクショントランザクションを適用しています。+''<nowiki>$this->transactional()</nowiki>'' はアクショントランザクションするコントローラクラスのメソッドです。上の例では insert、update そして deleteアクショントランザクションしています。
  
-Apricotは、アクションを呼び出す前にトランザクションを開始し、アクションが例外をスローしなかった場合、トランザクションが成功したものとみなして、そのトランザクションをコミットします。一方、アクションが ''ApplicationException'' 例外をスローした場合、Apricotは、それをキャッチしてエラーログを出力して、アクション代わりに前画面に戻るリダイレクトレスポンスをします。+Apricotは、アクションを呼び出す前にトランザクションを開始し、アクションが例外をスローしなかった場合、トランザクションが成功したものとみなして、そのトランザクションをコミットします。一方、アクションが ''ApplicationException'' 例外をスローした場合、Apricotは、それをキャッチしてエラーログを出力して、アクション代わって前画面に戻るリダイレクトレスポンスを生成します。
  
 \\ \\
行 476: 行 476:
 ==== モデル ==== ==== モデル ====
  
-Apricotの個々のモデルクラスは、''\App\Foundation\Model'' から継承して作りますが、このクラスはカスタマイズを前提としています。初期に実装されている ''Model'' クラスは ORMに [[https://github.com/j4mie/idiorm|Idiorm]] を使用し、以下のメソッドを実装しています。+Apricotの個々のモデルクラスは、''\App\Foundation\Model'' から継承して作りますが、このクラスはカスタマイズされることを前提としています。初期に実装されている ''Model'' クラスは ORMに [[https://github.com/j4mie/idiorm|Idiorm]] を使用し、以下のメソッドを実装しています。
  
   * findAll() --- 全件検索   * findAll() --- 全件検索
行 491: 行 491:
   * version_no (integer) --- バージョンNo(楽観的ロックで使用)   * version_no (integer) --- バージョンNo(楽観的ロックで使用)
  
-このように、初期実装されている ''Model'' クラスには幾つかの前提があるので、アプリケーションに合わせてカスタマイズまたは再作成して下さい。また、ORMも [[https://github.com/j4mie/idiorm|Idiorm]] 以外のものを使うことができます。+このように、初期実装されている ''Model'' クラスには幾つかの前提があるので、アプリケーションに合わせてカスタマイズまたは再作成した方が良かもしれません。また、ORMも [[https://github.com/j4mie/idiorm|Idiorm]] 以外のものを使うことができます。
  
 以下は、初期実装されている ''Model'' クラスを継承したユーザモデルの例です。個々のモデルクラスは、''\App\Models'' の下に配置されます。 以下は、初期実装されている ''Model'' クラスを継承したユーザモデルの例です。個々のモデルクラスは、''\App\Models'' の下に配置されます。
apricot/usage/ja/features.1600324571.txt.gz · 最終更新: 2020/09/17 15:36 by y2sunlight