masatoの日記

やっていきます

PerlのWAF Amon2で検索窓をつくってみる

Perlを勉強するかたわらAmon2でチュートリアル的なブログサイトを作っております。 さくらのVPSで。

さて、ブログを含めインターネットでよく見かける検索窓を自分のブログサイトにもほしくなりました。 そのあれをつくってみます。

HTML(index.tx)

<form action="/search">
  <input type="text" name="search_word">
  <button type="submit" id="search">Search</button>
</form>

こんなの。 f:id:masatoz:20170416230651p:plain

サーバー側(コントローラー)

package MyApp::Web::C::Root;

sub search {
    my ( $class, $c) = @_;

    # 検索語を取得・・・①
    my $search_word = $c->req->parameters->{search_word};
    
    # LIKE 検索・・・②
    my @matches = $c->db->search('schedules', [ 'body', {'like' => "%$search_word%"} ]);
    return $c->render('index.tx', { schedules => \@matches });
}

コメント

Plack::RequestのparametersメソッドがAmon2の$cオブジェクトから使える。 HTMLに記述した<input name="search_word"></input>フィールドの入力を取得するためには、$c->req->parameters->{search_word}とすればいいです。

参考リンク(CPANPlack::Request - search.cpan.org

② Amon2の標準で使えるO/RマッパーTengを使ってLIKE検索する。 こちらのサイトを参考にさせていただきました。 とてもわかりやすいリファレンスです。

PerlのO/RマッパーTengの簡単なリファレンス | UCWD-Studio - @matsuoka_UCWDjp 's Private Projects.

DEMO

実際のデモサイトです。 つくりかけのあれこれが散らかっていますが気にしないでください。 Scheduler