@nqounetです。
第6回では、テンプレートに値を渡す方法を学びました。
フォームの値を画面に表示することはできるようになりましたが、フォームのテキストボックスに値が残っていませんでしたので、値を残して(入れて)おくようにしましょう。
よくある機能はアプリで実装されている
最近はあまり見かけないとは思いますが、フォームを入力してエラーになった場合、ブラウザの戻るボタンで戻ってください、的な感じで戻ると、フォームが空っぽになっていたりして、キーッっとなったりした思い出があると思います。
このような思い出が多いからか、最近では、入力ミスがあっても、フォームの画面が表示されて、各項目にエラーが表示されていることが多くなっています。
Mojoliciousには、そのような機能を持ったフォームを作成する方法があります。
サンプルコード全体
Mojoliciousのバージョンは6.01で確認しています。
ファイル名はなんでも良いですが、ひとまずmyapp.pl
と考えてください。
|
|
解説
Line 22 - 24
|
|
前回から変更になっているのはこの部分のみです。
Mojoliciousで通常使うテンプレートは、Perlのコードを埋め込むことができる、Embedded Perl
と呼ばれる仕組みを使っています。
前回使用した、<%= ... %>
というのは、実はPerlのコードを実行して、その結果をその場所に埋め込む(文字を置き換える)という仕組みになっています。
つまり、<%= $hello %>
は、$hello
を実行した結果(Perlでは、こういう場合は変数の中身になります)を表示している事になります。
今回使用している%=
は、行全体をPerlのコードとして実行して、その結果を埋め込む、という仕組みになります。
%=
の左側には空白はあってもOKです(半角のみです。全角はダメ)が、それ以外の文字があるとわかりにくいエラーになりますので気をつけてください。
%
については、Perlのコードとして実行しますが、何も埋め込みません。
さて、form_for
、text_field
、submit_button
についてですが、これらはテンプレートで使える関数で、実行するとHTMLを返します。
これらの関数は、Mojoliciousの標準プラグインのTagHelpers
で定義されています。
- Mojolicious::Plugin::TagHelpers - Tag helpers plugin
- Mojolicious::Plugin::TagHelpers · yuki-kimoto/mojolicious-guides-japanese Wiki
それぞれの最初の引数の文字列は、form_for
ではaction
、text_field
ではname
、submit_button
ではvalue
の値になります。
特に大事なのがtext_field
で、この引数がname
の値になるだけでなく、リクエストされたパラメータの値が自動的に表示されるようになります。
今回の場合、テンプレートで指定しているuser
と$c->param('user')
がお互いに参照しあう状態になります。
多機能だけど必要なところだけ使えばOK
フォームをより親切に作成することで、ウェブアプリの完成度を高めることが可能です。
皆さんも美味しいところだけをうまく使ってサクッとウェブアプリを作ってみましょう。