<commit_before># Ethnamの動作概要

http://ethna.jp/old/ethna-document-tutorial-overview.html

Ethnaは当初JavaのStrutsの構造を模倣して作られました。そのため、基本的な動作はStrutsに似ています。(また,2004年ごろに流行ったPHPフレームワークの一つであるMojaviにも似ています。)


## 大雑把な動作イメージ

* クライアントからのリクエストをエントリポイントが受け取ります。
* エントリポイントは、Controllerクラスを呼び出します。
* Controllerクラスは、リクエストに対応するActionClassを探索し、インスタンスを生成し、実行します
* ActionClassは処理(例えば、ログインやデータベースの更新等)を実行し、結果をControllerオブジェクトに返します
* ControllerオブジェクトはActionClassが返した結果に対応するビューオブジェクトを生成します
* ビューオブジェクトはHTMLをクライアントに対して表示します

つまり、Ethnaを使ってアプリケーションを作る場合は

Controllerがどんなリクエスト(例えば「ログインする」とか「日記を表示する」とか)を受け付けるか(= 「アクション」)を定義して
1.で定義したアクションが実際に何をするか、というコードを書いて
その結果どんな画面が表示されるか、を書く


## もう少し詳しい内部動作

クライアントはアプリケーションのエントリポイントとなるスクリプト(index.php)にアクセスします
index.phpは以下のようなスクリプトで、Controllerを生成、実行します

```php
<?php
include_once('/path/to/project/app/sample_controller.php');
Sample_Controller::main('Sample_Controller', 'index');
?>
```

ControllerはAction Formというオブジェクトを生成します。このオブジェクトにはクライアントから送信されたフォーム値等のコンテナです
Controllerはクライアントから送信されたフォーム値に基づいて実行するアクションを決定し、対応するAction Classを生成、実行します。なお、デフォルトでは"action_"で始まるフォーム値がある場合に、それ以降の文字列がアクション名となります。つまり
index.php?action_login=true
なら
login
というアクションになります
Action ClassはAction Formを利用して、クライアントから送信されたフォーム値や、ビューに表示する変数値を設定します
Action Classは処理が終了すると、遷移先の名前をコントローラに返します
ControllerはAction Classからの戻り値(遷移先)に応じてビューオブジェクトを生成します
ビューオブジェクトは、Action Formからテンプレートファイルで利用する変数値を取得します
ビューオブジェクトがHTMLを表示します
以上で、何となくはイメージを掴めていただけたと思います。



<commit_msg>refine document<commit_after># Ethnamの動作概要

http://ethna.jp/old/ethna-document-tutorial-overview.html

Ethnaは当初JavaのStrutsの構造を模倣して作られました。そのため、基本的な動作はStrutsに似ています。(また,2004年ごろに流行ったPHPフレームワークの一つであるMojaviにも似ています。)


## 大雑把な動作イメージ

* クライアントからのリクエストをエントリポイントが受け取ります。
* エントリポイントは、Controllerクラスを呼び出します。
* Controllerは、リクエストに対応するActionClassを探索し、インスタンスを生成し、実行します
* ActionClassは処理(例えば、ログイン,データベースとのやりとり等)を実行し、結果をControllerに返します
* ControllerはActionClassの戻り値から、ビューオブジェクトを決定し生成します
* ビューオブジェクトはHTMLをクライアントに対して表示します

つまり、Ethnaを使ってアプリケーションを作る場合は

* Controllerがどんなリクエスト(例えば「ログインする」とか「日記を表示する」とか)を受け付けるか(= 「アクション」)を定義して
* 1.で定義したアクションが実際に何をするか、というコードを書いて
* その結果どんな画面が表示されるか、を書く


## もう少し詳しい内部動作

クライアントはアプリケーションのエントリポイントとなるスクリプト(index.php)にアクセスします
index.phpは以下のようなスクリプトで、Controllerを生成、実行します

```php
<?php
include_once('/path/to/project/app/sample_controller.php');
Sample_Controller::main('Sample_Controller', 'index');
?>
```

ControllerはAction Formというオブジェクトを生成します。このオブジェクトにはクライアントから送信されたフォーム値等のコンテナです
Controllerはクライアントから送信されたフォーム値に基づいて実行するアクションを決定し、対応するAction Classを生成、実行します。なお、デフォルトでは"action_"で始まるフォーム値がある場合に、それ以降の文字列がアクション名となります。つまり
index.php?action_login=true
なら
login
というアクションになります
Action ClassはAction Formを利用して、クライアントから送信されたフォーム値や、ビューに表示する変数値を設定します
Action Classは処理が終了すると、遷移先の名前をコントローラに返します
ControllerはAction Classからの戻り値(遷移先)に応じてビューオブジェクトを生成します
ビューオブジェクトは、Action Formからテンプレートファイルで利用する変数値を取得します
ビューオブジェクトがHTMLを表示します
以上で、何となくはイメージを掴めていただけたと思います。




{'fraction_non_alphanumeric': 0.08045977011494253, 'fraction_numerical': 0.0034831069313827935, 'mean_word_length': 15.044692737430168, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4178290', 'n_tokens_mistral': 2119, 'n_tokens_neox': 1920, 'n_words': 87}