Mojolicious::Liteでフォームを使う

@nqounetです。

第4回はパラメータを読み取る感じだったのですが、折角なのでフォームを使って試してみましょう。

ということで、第5回はフォームを使ってみます。

入門シリーズにしました

第1回を書いた当初はサンプルシリーズのつもりでしたが、書いているうちに内容が入門者向けになってしまったので入門シリーズにしました。

サンプルコード全体

Mojoliciousのバージョンは5.77で確認しています。

ファイル名はなんでも良いですが、ひとまずmyapp.plと考えてください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env perl
use Mojolicious::Lite;

get '/' => 'index';

get '/foo' => sub {
    my $c    = shift;
    my $user = $c->param('user');
    $c->render(text => qq{Hello $user!});
};

app->start;
__DATA__
@@ index.html.ep
<!DOCTYPE html>
<html>

<head>
    <title>title</title>
</head>

<body>
    <form action="/foo">
        <input name="user" type="text">
        <input type="submit" value="Submit!">
    </form>
</body>

</html>

解説

Line 1 - 2

1
2
#!/usr/bin/env perl
use Mojolicious::Lite;

毎回同じ説明になりますが、Mojolicious::Liteを使うとstrictwarningsutf8と5.10で使える命令文が使えるようになります。

Line 4

1
get '/' => 'index';

今回はフォームを使うので、HTMLの出力をします。

Perlのコードの中にHTMLが入ると非常に読みにくくなるので、HTMLはテンプレートにしてしまいましょう。(後ほど解説します)

これまではコードリファレンスを書いてきましたが、文字列を渡すこともできます。

仕組みが難しいので詳しい説明は省きますが、このような書き方をすると文字列で渡した名前のテンプレートを使うようになります。

Line 6 - 10

1
2
3
4
5
get '/foo' => sub {
    my $c = shift;
    my $user = $c->param('user');
    $c->render(text => qq{Hello $user!});
};

この部分は、第4回の9行目から13行目と全く同じですので、そちらをご覧ください。

Line 12

1
app->start;

今回はテンプレートがありますので最後の行ではありませんが、Perlのコードとしては最後に書いておきます。

Line 13 - 29

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
__DATA__
@@ index.html.ep
<!DOCTYPE html>
<html>

<head>
    <title>title</title>
</head>

<body>
    <form action="/foo">
        <input name="user" type="text">
        <input type="submit" value="Submit!">
    </form>
</body>

</html>

Perlでは、__DATA__だけが書いてある行があると、それ以降をデータとして使用できます。(詳細は省略します)

Mojolicious::Liteではその機能を使ってテンプレートを定義でき、テンプレートも同じファイルに書くことができます。

このように書くテンプレートを「インラインテンプレート」と呼んでいます。

インラインテンプレートでは、ファイル名に相当する部分を@@に続けて書きます。

この例では@@とファイル名の間に半角スペースを入力していますが、なくても構いません。私は見やすいと思って半角スペースを入れています。

4行目で指定した名称がindexの場合、index.html.epが対象になります。htmlepは指定すれば変更できます。指定方法はいずれ紹介するかもしれません。

テンプレートにはHTMLがそのまま書けますので、好きなように書いても問題ありません。

ただし、formのactionは’/foo’に、テキストボックス(input type=“text”)のnameは’user’にしておかないと、動作しません。これらは6行目から10行目に書いてあるとおり、そのURLやnameで動作するように書いているからです。

getの最初の引数である’/foo’と、formのactionの’/foo’が対応しており、また、コントローラーのparamメソッドの引数である’user’と、テキストボックスのnameである’user’が対応しています。

morbo myapp.plとしてサーバーを起動し、http://localhost:3000にアクセスして動作を確認してみてください。

フォームに文字を入力して投稿すると、画面にその文字列が表示されるはずです。

そして、その時にURLがどうなっているのかも是非確認してみてください。

多機能だけど必要なところだけ使えばOK

フォームによるデータの送信と、パラメータによるデータの受信を覚えれば、あとはその応用でウェブアプリを作ることが可能です。

皆さんも美味しいところだけをうまく使ってサクッとウェブアプリを作ってみましょう。

ところで、今月末(2015年2月28日)の土曜日にPerl入学式の第6回(今期の最終回)を開催します。

内容としては、何かしらのウェブアプリ(予定では1行掲示板)を作成します。

大阪の講師は私が担当する予定です。

あなたがまだ知らないPerlをお見せします。

お申し込みをお待ちしております。

comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。