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が一番下にあったので、マネしてみたらうまくいった。