Mojolicious純正のフォームバリデーション & フィルター
- 2017.06.30
- Mojolicious perl
- Mojolicious, perl, フォーム
Mojolicious::Validator::Validation - Perform validations - metacpan.org
Mojolicious純正のフォームバリデーションを使う上で気を付ける点を書き留めておく。Mojolicious::Plugin::TagHelpersとも相性良いし(当たり前)、活用すべき。
my $validation = $c->validation;
$validation->required('name')->like(qr/hoge/);
$validation->optional('name2', 'trim')->like(qr/hoge2/);
目次
バリデーション
required()又はoptional()から始める
$validation->required('name')
又は$validation->optional('name')
から始める。メソッドチェーンでもいいし、都度バリデーションメソッドを呼んでも良い。
- requidedかoptionalを呼んだ時点でバリデーション対象のfieldが切り替わる。
- 現在バリデーション対象になっているfieldは
$validation->topic
で取得できる。
filterはrequired()又はoptional()の第2引数以降で指定する
※ Mojolicious v6.41以降
$validation->required( 'name', 'filter1', 'filter2', ... );
$validation->optional( 'name', 'filter1', 'filter2', ... );
DB等へ保存する値は$validation->outputの値を使う
$c->req->params
の値はリクエスト時の値なのでDB等に値を保存する場合には使用しない。
- 特にfilterを使う場合は注意が必要。
- filter適用後の値は
$validation->output
に収納されている。
my $hash_ref = $validation->output;
my $value = $hash_ref->{name};
my $scalar = $validation->param('name');
my $array_ref = $validation->every_param('name');
フィルター
フィルインフォーム
タグヘルパーを使うとfill-in formしてくれるけど、値にフィルターを適用する場合は注意が必要。
- バリデーション実行時に
$c->param()
でリクエストパラメータの値の書き換えが必要。- タグヘルパーの値補完には
req->param
の値が使われる
- タグヘルパーの値補完には
バリデーションも同時に行っている場合
バリデーションエラーがあるとvalidation->param()
がundefを返すのでバリデーションエラーがない時だけ書き換える...としなくてはならない。
my $validated_email_value = $c->validation->param('email');
$c->param( email => $validated_email_value ) if $validated_email_value;
独自のバリデーションを追加する
$validation->validator->add_check( name => sub {} )
独自のフィルターを追加する
$validation->validator->add_filter( name => sub {} )
-
前の記事
[git]後で修正しようと作っておいたbranchの出発点を最新のものにする 2017.06.28
-
次の記事
MAMP3.xのcURLをアップグレードして延命する 2020.03.03