MySQL、オープンソース系、ウェブ系ネタ。metacpan.orgMojolicious純正のフォームバリデーションを使う上で気を付ける点を書き留めておく。Mojolicious::Plugin::TagHelpersとも相性良いし(当たり前)、活用すべき。'trim')->like(qr/hoge2/);バリデーションrequired()又はoptional()から始める$validation->required('name')又は$validation->optional('name')から始める。メソッドチェーンでもいいし、都度バリデーションメソッドを呼んでも良い。requidedかoptionalを呼んだ時点でバリデーション対象のfieldが切り替わる。現在バリデーション対象になっているfieldは$validation->topicで取得できる。);DB等へ保存する値は$validation->outputの値を使う$c->req->paramsの値はリクエスト時の値なのでDB等に値を保存する場合には使用しない。filterを使う場合は注意が必要。filter適用後の値は$validation->outputに収納されている。formしてくれるけど、値にフィルターを適用する場合は注意が必要。バリデーション実行時に$c->param()でリクエストパラメータの値の書き換えが必要。タグヘルパーの値補完にはreq->paramの値が使われるバリデーションも同時に行っている場合バリデーションエラーがあるとvalidation->param()がundefを返すのでバリデーションエラーがない時だけ書き換える...としなくてはならない。commentsTweetMojoliciousでactionの前後に実行される独自のHookを作る。before_action、after_action編PerlのWebApplicationFrameworkであるMojoliciousでは様々なフックが用意されているのだけれど、actionの前後だけに実行したい場合は独自にフックポイントを追加しないといけない。実装方法その1一番単純な実装方法はaround_actionフックを使うのが良さそう。actionは$lastフラグが真の時に実行されるので前後に独自のフックをエミットする。);}このフックを使えば動的ページのみでフックを実行できる。session関連の操作とかに便利。実装方法その2上記のコードの場合は全てのactionに適用されてしまうので、フックを実行したくないcontrollerを作りたい場合はMojolicious::Controllerを継承したclassを作る事で実現できる。'MyApp::NoHookController';...before/after_actionフックを使う場合はMyApp::Controllerを継承したcontrollerを作り、使わない場合はMyApp::NoHookControllerを継承したcontrollerにする。commentsTweetAtomエディターのemmetをMojoliciousのテンプレートで使うlanguage-mojoliciousを導入する。emmetはcmd+shift+eにしてみる。いうディレクトリ名で雛形作成される。ドキュメントにAuthor情報を追記する。lib/MyPlugin.pmminillaではPODに書かれているAuthorが使われる。作成された雛形(MyPlugin.pm)のPODにはAuthorの項目がないので追記する。migrateminillaで必要なファイルが作成される。Makefileを削除Makefileは必要ないファイルなので削除する。files/directories!とおこられるみたい。commit'まずは全てをコミットしておく。commentsTweetmojoliciousをNginxの後ろで動かす時にHTTPSを検知するにはMojoliciousでHTTP(S)の振り分けをリバースプロキシのバックエンドでも出来るようにしてみるが、さいきんのバーションでは変更があったらしくmojoliciousをばーじょんあっぷしたらうごかない。こちらのGistが参考になる。DBIx::Class(DBIC)でtimestamp的なカラムの自動更新Mojoliciousでactionの前後に実行される独自のHookを作る。