DBIx::Skinnyで取得結果をテンプレに渡すとき
#!perl use strict; use warnings; use DBIx::Skinny; use Text::Xslate; use Data::Section::Simple; my $vpath = Data::Section::Simple->new()->get_data_section(); my $tx = Text::Xslate->new(path => [$vpath]); { package MyModel; use DBIx::Skinny connect_info => { dsn => 'dbi:SQLite:', }; package MyModel::Schema; use DBIx::Skinny::Schema; install_table user => schema { pk 'id'; columns qw/id name/; }; } MyModel->do(q{ CREATE TABLE user (id integer primary key, name text)}); MyModel->insert('user', { id => 1, name => 'taro' }); MyModel->insert('user', { id => 2, name => 'jiro' }); MyModel->insert('user', { id => 3, name => 'saburo'}); my $iterator = MyModel->search('user'); my $row = MyModel->single('user', { id => 2 }); print $tx->render('index.tx', { iterator => $iterator, row => $row }); __DATA__ @@ index.tx : while $iterator.next() -> $item { <: $item.id :> <: $item.name :> : } <: $row.id :> <: $row.name :>
DBIx::Skinnyでsearch()とかsingle()とかするとIteratorオブジェクトやRowオブジェクトが返ってくるのですが、テンプレ側で使うのに直接HashRefとかArrayRefとかで取得できないかなあと思っていたけどXslateとかならそのままオブジェクトを渡しちゃえばいいだけだということに気が付いた。
仕事で使ってるのがHTML::Templateだからかこの発想が出てこなかった。