CGI の実装: CGI 関連クラスの継承関係 config.cgi では、@ISA (継承関係)が次のようになっています。 FML::CGI::Menu FML::Process::CGI::Kernel FML::Process::CGI::Param thread.cgi の継承も同様で、次のようになっています。 FML::CGI::Thread FML::Process::CGI::Kernel FML::Process::CGI::Param 各 .cgi 固有のコードは FML::CGI:: の階層に置くようにします。 FML::Process::CGI::Kernel には、 プロセス全体の制御部分と、 デフォルトの CGI 固有関数 run_cgi_なんとか() を置きます。 必要に応じて FML::CGI:: の階層でオーバーロードしてください。 なお、FML::Process::CGI::Kernel の以下のメソッドは使われていません。 run_cgi_log run_cgi_dummy run_cgi_date CGI の実装: config.cgi の実装 前述のように config.cgi の場合、継承関係は次のようになっています。 FML::CGI::Menu FML::Process::CGI::Kernel FML::Process::CGI::Param 以下では、config.cgi の処理をみてみましょう。 config.cgi のプロセスオブジェクト $curproc は FML::Process::CGI::Kernel クラスです。 FML::Process::CGI::Kernel では new() prepare() verify_request() run() finish() が順に呼ばれます。 重要なのは run() です。run() は $curproc->html_start(); (FML::CGI::Menu) $curproc->_drive_cgi_by_table(); (FML::Process::CGI::Kernel) $curproc->html_end(); (FML::CGI::Menu) を実行します。画面を作るのは _drive_cgi_by_table() です。 この関数から呼ばれる関数が CGI のメイン部分です。 $curproc->_drive_cgi_by_table() は、以下の各「run_いろいろ()」メソッドを呼び出します。 run_cgi_main (FML::CGI::Menu) cgi_execute_command (FML::Process::CGI::Kernel) を使い、 FML::Command 経由で FML::Command::Admin::コマンドを実行します。 これが、GUI からコマンドを実行するコードの本体です。 ただし、画面の表示は別です。 たとえば GUI から「ユーザのメールアドレスを登録する」場合、 run_cgi_main() が実際の登録作業を行ないます。 run_cgi_menu() は、入力画面の生成をおこないます。 前者は FML::Command::Admin::subscribe::process() メソッド、 後者は FML::Command::Admin::subscribe::cgi_menu() メソッドを呼び出しています。 他にも run_cgi_* 関数がありますが、これらは画面の作りに関係する補助的 なものたちといってよいでしょう。 この2つは、たいていデフォルトのものを使っています。 run_cgi_title FML::Process::CGI::Kernel クラス (タイトル表示) run_cgi_options FML::Process::CGI::Kernel クラス (言語選択画面) また、この .cgi 固有のメソッド群として次のものがあります。 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 クラス ちなみに run_cgi_menu() は cgi_execute_cgi_menu() 経由で FML::Command::Admin::コマンド::cgi_menu() を実行しています。