「シンプルなWebアプリを今、自分なりに書いてみる」を Mojolicious 4.0 に対応させてみた。
「シンプルなWebアプリを今、自分なりに書いてみる」が 2013年5月にリリースされた 4.0 に対応していないので、自分なりに書き直してみた。
修正したのは、Mojolicious::Controller で廃止された API を修正した。
#!/usr/bin/perl use Mojolicious::Lite; use HTML::FillInForm::Lite; use FormValidator::Lite; use utf8; get '/' => sub { my $self = shift; $self->stash->{error_messages} = undef; $self->render('index'); }; post '/' => sub { my $self = shift; my $validator = FormValidator::Lite->new($self->req); $validator->set_message( 'zip.not_null' => '郵便番号が空です。', 'zip.length' => '郵便番号が正しくありません。', 'zip.uint' => '郵便番号が正しくありません', ); my $res = $validator->check( zip => ['NOT_NULL', 'UINT', ['LENGTH' => 7]], ); my @error_messages = (); if ($validator->has_error) { for my $message ($validator->get_error_messages) { push @error_messages, $message; } $self->stash->{error_messages} = \@error_messages; # 下記を修正 my $html = $self->render('index', partial => 1); # 下記を修正 $self->render( text => HTML::FillInForm::Lite->fill(\$html, $self->req->params), format => 'html' ); } else { $self->stash->{zip} = $self->req->param('zip'); $self->render('thankyou'); } }; app->start; __DATA__ @@ index.html.ep % layout 'default'; <p>郵便番号を7桁の数字で入力してください。</p> % if ($error_messages) { % for my $message (@$error_messages) { <p><b style="color:red;"><%= $message %></b></p> % } % } <form action="/" method="post"> <input type="text" name="zip" maxlength="7" size="7"/> <input type="submit" value="送信" /> </form> @@ thankyou.html.ep <p>正常に入力されました。郵便番号は「<%= $zip %>」です。<br />ありがとうございます。</p> <p><a href="/">戻る</a></p> @@ layouts/default.html.ep <!DOCTYPE html> <html> <head><title><%= title %></title></head> <body><%= content %></body> </html>
わずか1年半前のサンプルコードが動かなくなるなんて、変化の速さに改めて驚く。