Catalyst-Plugin-CRUD (3)

さきほどのエントリーまでで、モデルは作ったので、次はビューです。Catalyst::Plugin::CRUD は Template::Toolkit と ClearSilver に対応しています。HTML::Template は要望があれば対応させようと思います。

Template::Toolkit を使うメリット

  • 高機能です
    • さまざまなプラグインを組み合わせることでさらに高機能になります

Template::Toolkit を使うデメリット

  • Pure Perl で書かれていて遅いです
    • XS を使っているのは stash の一部のモジュールだけです
  • いろんなことができすぎて管理側以外の画面で使おうとすると深刻なセキュリティホールになりかねません
  • 気がつくと、ロジックをべったりテンプレートに書いてしまう危険性があります
    • 汚い PHP のソースみたいになってメンテナンス性が落ちます

HTML::Template を使うメリット

  • Pure Perl で書かれていますが、Template::Toolkit よりはずっと早いです
  • 基本的には文字列置き換えなので Template::Toolkit に比べればセキュリティのリスクは低いです

HTML::Template を使うデメリット

  • テンプレート中に Perl のコードを埋めることはできません
    • 一切の関数呼び出しができません
    • オブジェクトを渡すこともできません

ClearSilver を使うメリット

  • C言語で書かれていて超高速です
    • Trac でも使われています(というか Trac 以外ではほとんど利用例をみませんが・・)
    • C, C#, Java, Python, Ruby からも使えるため、他のプロダクトと組み合わせやすいです
  • 基本的には文字列置き換えなので Template::Toolkit に比べればセキュリティのリスクは低いです

ClearSilver を使うデメリット

  • テンプレート中に Perl のコードを埋めることはできません
    • 一切の関数呼び出しができません
    • オブジェクトを渡すこともできません

Template::Toolkit を使う場合

  • まずは CPAN からインストールします
$ su -
# cpan Template Catalyst::View::TT Catalyst::Plugin::I18N
  • ビューを作ります
$ cd TinyURL/script
$ ./tinyurl_create.pl view TT TT

ClearSiler を使う場合

  • まずは本家サイトからダウンロードしてインストールします
$ wget http://www.clearsilver.net/downloads/clearsilver-0.10.4.tar.gz
$ tar xvzf clearsilver-0.10.4.tar.gz
$ cd clearsilver-0.10.4
$ ./configure
$ cd perl
$ perl Makefile.PL
$ make
$ su
# make install
  • 次に CPAN からインストールします
$ su -
# cpan Catalyst::View::ClearSilver
  • ビューを作ります
$ cd TinyURL/script
$ ./tinyurl_create.pl view CS ClearSilver
  • ClearSilver を使う場合は mo ファイルを作ります
    • mo ファイルは po ファイルを元にして作られるバイナリファイルで、po ファイルを編集するたびに mo ファイルを作り直す必要があります
    • Template::Toolkit も mo ファイルに対応しています
$ cd TinyURL/lib/TinyURL/I18N
$ msgfmt -o ja.mo ja.po
$ msgfmt -o en.mo en.po
  • TinyURL/lib/TinyURL/Controller/Root.pm の end を以下のように書き換えます
use File::chdir;
use Locale::Maketext::Gettext;

sub end : ActionClass('RenderView') {
    my ( $self, $c ) = @_;

    local $CWD = '/home/username/BookMark/root';
    my %loc = %{MyApp::I18N::ja::Lexicon};
    $c->stash->{loc} = \%loc;
}

自動でできるテンプレートを変えたい

Catalyst::Helper::Model::CRUD を変更すれば OK です。Catalyst::Helper は Template::Toolkit を使った表記に対応しています。