summaryrefslogtreecommitdiff
path: root/fml/doc/ja/tutorial/internals/cgi.examples.sgml
diff options
context:
space:
mode:
authorfukachan <fukachan>2004-03-31 06:03:00 +0000
committerfukachan <fukachan>2004-03-31 06:03:00 +0000
commit3454bf98d49c1d6f2c5e77e2da9e87bc5800f5bf (patch)
tree986010191a75b4c0590e2a717564ecc9c5fd6135 /fml/doc/ja/tutorial/internals/cgi.examples.sgml
parentec7961cb88db3a2e8d954d6d286e4037af6c6f51 (diff)
downloadfml8-3454bf98d49c1d6f2c5e77e2da9e87bc5800f5bf.tar.gz
fml8-3454bf98d49c1d6f2c5e77e2da9e87bc5800f5bf.tar.bz2
fml8-3454bf98d49c1d6f2c5e77e2da9e87bc5800f5bf.zip
describe .cgi implementation
Diffstat (limited to 'fml/doc/ja/tutorial/internals/cgi.examples.sgml')
-rw-r--r--fml/doc/ja/tutorial/internals/cgi.examples.sgml128
1 files changed, 128 insertions, 0 deletions
diff --git a/fml/doc/ja/tutorial/internals/cgi.examples.sgml b/fml/doc/ja/tutorial/internals/cgi.examples.sgml
new file mode 100644
index 00000000..737cad6d
--- /dev/null
+++ b/fml/doc/ja/tutorial/internals/cgi.examples.sgml
@@ -0,0 +1,128 @@
+<!--
+ $FML: dbms.sgml,v 1.5 2003/05/31 08:51:09 fukachan Exp $
+
+ 注意: cgi.sgml の中にはめ込むので <chapter> は不必要だ。
+-->
+
+
+
+<sect1 id="cgi.internal.example.isa">
+ <title>
+ CGI の実装: CGI 関連クラスの継承関係
+ </title>
+
+<para>
+config.cgi では、@ISA (継承関係)が次のようになっています。
+<screen>
+FML::CGI::Menu FML::Process::CGI::Kernel FML::Process::CGI::Param
+</screen>
+thread.cgi の継承も同様で、次のようになっています。
+<screen>
+FML::CGI::Thread FML::Process::CGI::Kernel FML::Process::CGI::Param
+</screen>
+</para>
+
+<para>
+各 .cgi 固有のコードは FML::CGI:: の階層に置くようにします。
+</para>
+
+<para>
+FML::Process::CGI::Kernel には、
+プロセス全体の制御部分と、
+デフォルトの CGI 固有関数 run_cgi_なんとか() を置きます。
+必要に応じて FML::CGI:: の階層でオーバーロードしてください。
+なお、FML::Process::CGI::Kernel の以下のメソッドは使われていません。
+<screen>
+run_cgi_log
+run_cgi_dummy
+run_cgi_date
+</screen>
+</para>
+
+</sect1>
+
+
+<sect1 id="cgi.internal.example.config.cgi">
+ <title>
+ CGI の実装: config.cgi の実装
+ </title>
+
+<para>
+前述のように config.cgi の場合、継承関係は次のようになっています。
+<screen>
+FML::CGI::Menu FML::Process::CGI::Kernel FML::Process::CGI::Param
+</screen>
+以下では、config.cgi の処理をみてみましょう。
+</para>
+
+<para>
+config.cgi のプロセスオブジェクト $curproc は
+FML::Process::CGI::Kernel クラスです。
+FML::Process::CGI::Kernel では
+<screen>
+ new()
+ prepare()
+ verify_request()
+ run()
+ finish()
+</screen>
+が順に呼ばれます。
+</para>
+
+<para>
+重要なのは run() です。run() は
+<screen>
+ $curproc->html_start(); (FML::CGI::Menu)
+ $curproc->_drive_cgi_by_table(); (FML::Process::CGI::Kernel)
+ $curproc->html_end(); (FML::CGI::Menu)
+</screen>
+を実行します。画面を作るのは _drive_cgi_by_table() です。
+この関数から呼ばれる関数が CGI のメイン部分です。
+</para>
+
+<para>
+$curproc->_drive_cgi_by_table()
+は、以下の各「run_いろいろ()」メソッドを呼び出します。
+<screen>
+run_cgi_main (FML::CGI::Menu)
+</screen>
+cgi_execute_command (FML::Process::CGI::Kernel) を使い、
+FML::Command 経由で FML::Command::Admin::コマンドを実行します。
+これが、GUI からコマンドを実行するコードの本体です。
+ただし、画面の表示は別です。
+</para>
+
+<para>
+たとえば GUI から「ユーザのメールアドレスを登録する」場合、
+run_cgi_main() が実際の登録作業を行ないます。
+run_cgi_menu() は、入力画面の生成をおこないます。
+前者は FML::Command::Admin::subscribe::process() メソッド、
+後者は FML::Command::Admin::subscribe::cgi_menu() メソッドを呼び出しています。
+</para>
+
+<para>
+他にも run_cgi_* 関数がありますが、これらは画面の作りに関係する補助的
+なものたちといってよいでしょう。
+</para>
+
+<para>
+この2つはデフォルトのものを使っているという気分です。
+<screen>
+run_cgi_title FML::Process::CGI::Kernel クラス (タイトル表示)
+run_cgi_options FML::Process::CGI::Kernel クラス (言語選択画面)
+</screen>
+また、この .cgi 固有のメソッド群として次のものがあります。
+<screen>
+run_cgi_navigator FML::CGI::Menu クラス
+run_cgi_help FML::CGI::Menu クラス
+run_cgi_command_help FML::CGI::Menu クラス
+run_cgi_menu FML::CGI::Menu クラス
+</screen>
+</para>
+
+<para>
+ちなみに run_cgi_menu() は cgi_execute_cgi_menu() 経由で
+FML::Command::Admin::コマンド::cgi_menu() を実行しています。
+</para>
+
+</sect1>