Hatena::Groupcatalyst

masaki@catalyst RSSフィード

Fork me on GitHub
 | 

2008-06-26

Catalyst::View::Templated を今度こそ使う

| 10:31 | Catalyst::View::Templated を今度こそ使う - masaki@catalyst を含むブックマーク はてなブックマーク - Catalyst::View::Templated を今度こそ使う - masaki@catalyst Catalyst::View::Templated を今度こそ使う - masaki@catalyst のブックマークコメント

概要内部実装と見てきたので,いよいよこれを使って View を書いてみた話.

使う側は基本的に new() と _render() を実装すればいい.そんな感じで書いてみたのがこれ.coderepos://lang/perl/Catalyst-View-Tenjin

以下簡単に.

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

    # C::V::Templated doesn't use __PACKAGE__->config
    my $self = $class->next::method(
        $c, $class->merge_config_hashes($class->config, $args)
    );

__PACKAGE__->config を使えるようにするために merge_config_hashes してから next::method 呼び出して

    $self->{TEMPLATE_EXTENSION} ||= '.plhtml';

設定項目にデフォルト値を代入して

    my $config = { path => $self->{INCLUDE_PATH} };
    for my $key (qw( LAYOUT PREPROCESS )) {
        $config->{lc $key} = $self->{$key} if exists $self->{$key};
    }
    $config->{cache} = exists $self->{CACHE} ? $self->{CACHE} : 0;
    $self->_template(Tenjin::Engine->new($config));

    return $self;
}

Tenjin::Engine に渡すオプションを組み立てて engine を作っておく

sub _render {
    my ($self, $template, $stash, $args) = @_;

    local $Tenjin::USE_STRICT = 1;
    return $self->_template->render($template, $stash);
}

_render() は engine にレンダリングさせるだけ

ね,簡単でしょ?

トラックバック - http://catalyst.g.hatena.ne.jp/ikasam_a/20080626
 |