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)
を実行します。 CGI の画面を作る実体は _drive_cgi_by_table() メソッドです。 このメソッド内から呼ばれる関数が CGI のメイン部分です。

$curproc->_drive_cgi_by_table() メソッドは、 以下の各「run_いろいろ()」メソッド群を呼び出します。

たとえばコマンドを実行するメイン部分が run_cgi_main です。これは、 cgi_execute_command (FML::Process::CGI::Kernel) を呼び出し、 FML::Command 経由で「FML::Command::Admin::コマンド」クラスを実行します。 これが、GUI からコマンドを実行するコードの本体です。

画面の表示をするには別のメソッド群が呼ばれています。

たとえば GUI から「ユーザのメールアドレスを登録する」場合、 run_cgi_menu() が入力画面の生成をおこないます。 run_cgi_menu() は cgi_execute_cgi_menu() 経由で各コマンドクラスの 「FML::Command::Admin::コマンド::cgi_menu()」を実行しています。 この場合 FML::Command::Admin::subscribe::cgi_menu() メソッドを呼び出しています。

ちなみに、実際の登録作業をする run_cgi_main() は、 FML::Command::Admin::subscribe::process() メソッドを呼び出しています。

他にも 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 クラス
ヘルプなどはコマンドごとに違うわけですから、当たり前ですね? ただ、メッセージが異なるとかいうだけで、モジュールが違っても、 ほぼ似たようなつくりです。

fml 8.0 (fml-devel) project homepage is www.fml.org/software/fml8/.
fml 4.0 project homepage is www.fml.org/software/fml4/.
about one floppy bsd routers, see www.bsdrouter.org/.
other free softwares are found at www.fml.org/software/.

author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.

For questions about FML, e-mail <fml-bugs@fml.org>.