CatalystのForm::ValidatorとFillInFormが動いたとき日本語を入力してたらInternal Server Errorになっちゃうのの解決方法

先週オープンしたのにこのブログよりアクセス数が少ない残念なウェブサービスとしておなじみのhttp://bestgameon.net/ですが、これにFillInFormを導入しようとしてハマった。



こんなフォームで名前と内容欄にはForm::ValidatorでNOT_BLANKが設定してある。
この状態で送信を押すと、内容欄がValidatorに引っかかって、FillInFormがフォームの中身を戻そうとしてくれるのだけど、一番上の欄に日本語が入力されているのが原因でInternal Server Errorになる。
ちなみどの欄に日本語があっても同じ現象になる。


原因はよくわからないけど、解決策はわかった。
現象が起きたときのプラグインの読み込み順はこう。

use Catalyst qw/
    -Debug
    ConfigLoader
    Static::Simple
    Unicode
    FillInForm
    FormValidator::Simple
    FormValidator::Simple::Auto
/;

このUnicodeを、FillInFormの後ろに持ってくる。

use Catalyst qw/
    -Debug
    ConfigLoader
    Static::Simple
    FillInForm
    Unicode
    FormValidator::Simple
    FormValidator::Simple::Auto
/;

これで、さっきの現象は解決した。


ヒントにしたのはこの記事で、
Catalyst モジュールuse する順番が大事 | ブログが続かないわけ
順番が大事……と思って以下の入門記事を見ると、
初めてのCatalyst入門(13) Catalystによるフォーム操作と検証 (4/4):CodeZine(コードジン)
Unicodeが一番下にあったので、マネしてみたらうまくいった。